在使用 php 进行开发的过程中,无限分类是一个常见且重要的需求。为了方便使用和操作,我们通常将无限分类转化为数组形式。下面介绍如何将无限分类数据转换为数组形式。
在开始之前,我们需要确立无限分类数据的格式。一般而言,一个基本的无限分类数据格式由以下几个字段构成:
例如,一个简单的无限分类数据如下:
[
['id' => 1, 'name' => '电子产品', 'pid' => 0, 'level' => 1],
['id' => 2, 'name' => '手机', 'pid' => 1, 'level' => 2],
['id' => 3, 'name' => '电脑', 'pid' => 1, 'level' => 2],
['id' => 4, 'name' => '智能手机', 'pid' => 2, 'level' => 3],
['id' => 5, 'name' => '笔记本电脑', 'pid' => 3, 'level' => 3],
]我们可以定义一个递归函数,将无限分类数据转换为数组形式。该函数的代码如下:
function categoryToTree($source, $parentId = 0) {
$result = [];
foreach ($source as $key => $value) {
if ($value['pid'] == $parentId) {
unset($source[$key]);
$children = categoryToTree($source, $value['id']);
if (!empty($children)) {
$value['children'] = $children;
}
$result[] = $value;
}
}
return $result;
}我们使用了递归来实现无限分类的转换。具体来说,对于每一个分类数据,我们首先判断它是否是当前分类的子分类,如果是则将其加入到结果数组中同时递归处理它的子分类;否则跳过该分类,直接处理下一个分类数据。
立即学习“PHP免费学习笔记(深入)”;
注意,在递归处理子分类时,我们会将 $source 数组传入。为了保证每个分类只被处理一次,我们需要将已经处理过的分类数据从 $source 数组中删除。
使用上面定义的转换函数,我们可以将无限分类数据转换为数组形式。例如,我们执行以下代码:
$data = [
['id' => 1, 'name' => '电子产品', 'pid' => 0, 'level' => 1],
['id' => 2, 'name' => '手机', 'pid' => 1, 'level' => 2],
['id' => 3, 'name' => '电脑', 'pid' => 1, 'level' => 2],
['id' => 4, 'name' => '智能手机', 'pid' => 2, 'level' => 3],
['id' => 5, 'name' => '笔记本电脑', 'pid' => 3, 'level' => 3],
];
$result = categoryToTree($data);
print_r($result);输出结果如下:
Array
(
[0] => Array
(
[id] => 1
[name] => 电子产品
[pid] => 0
[level] => 1
[children] => Array
(
[0] => Array
(
[id] => 2
[name] => 手机
[pid] => 1
[level] => 2
[children] => Array
(
[0] => Array
(
[id] => 4
[name] => 智能手机
[pid] => 2
[level] => 3
)
)
)
[1] => Array
(
[id] => 3
[name] => 电脑
[pid] => 1
[level] => 2
[children] => Array
(
[0] => Array
(
[id] => 5
[name] => 笔记本电脑
[pid] => 3
[level] => 3
)
)
)
)
)
)可以看到,我们已经将无限分类数据转换为了数组形式,并且每个分类都包含了它的子分类。这样,我们就可以方便地使用数组函数处理无限分类数据了。
以上就是php如何将无限分类数据转换为数组形式的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号