使用递归是实现无限极分类的常见方法,但也可以通过循环来实现无限分类,以下是一个不使用递归的示例:
function buildTree($categories, $parentId = 0) {
$tree = array();
foreach ($categories as $category) {
if ($category['parent_id'] == $parentId) {
$children = buildTree($categories, $category['id']);
if ($children) {
$category['children'] = $children;
}
$tree[] = $category;
}
}
return $tree;
}
// 示例数据
$categories = array(
array('id' => 1, 'parent_id' => 0, 'name' => 'Category 1'),
array('id' => 2, 'parent_id' => 0, 'name' => 'Category 2'),
array('id' => 3, 'parent_id' => 1, 'name' => 'Category 1.1'),
array('id' => 4, 'parent_id' => 1, 'name' => 'Category 1.2'),
array('id' => 5, 'parent_id' => 3, 'name' => 'Category 1.1.1'),
array('id' => 6, 'parent_id' => 2, 'name' => 'Category 2.1'),
);
$tree = buildTree($categories);
print_r($tree);
上述代码中,buildTree 函数接受一个分类数组和一个父级分类 ID,通过循环遍历数组,找到所有父级分类 ID 为给定值的分类,并递归调用 buildTree 函数来构建子分类树。最终返回构建好的分类树。
示例数据中的数组表示了一组分类数据,其中 parent_id 字段表示父级分类的 ID。运行上述代码会输出如下结果:
Array
(
[0] => Array
(
[id] => 1
[parent_id] => 0
[name] => Category 1
[children] => Array
(
[0] => Array
(
[id] => 3
[parent_id] => 1
[name] => Category 1.1
[children] => Array
(
[0] => Array
(
[id] => 5
[parent_id] => 3
[name] => Category 1.1.1
)
)
)
[1] => Array
(
[id] => 4
[parent_id] => 1
[name] => Category 1.2
)
)
)
[1] => Array
(
[id] => 2
[parent_id] => 0
[name] => Category 2
[children] => Array
(
[0] => Array
(
[id] => 6
[parent_id] => 2
[name] => Category 2.1
)
)
)
)
输出结果是一个层级嵌套的数组,表示了分类的层级关系。
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站