PHP无限级分类函数的方法实现
本文实例讲述了PHP无限极分类函数的实现方法。分享给大家供大家参考,具体如下:
在开发程序的时候,有时候,我们需要获取所有栏目(例如一级栏目、二级栏目、三级栏目等等),并按照父子关系形成树型结构。可以采取使用递归或者通过引用方式(php中引用类似C或者C++中的指针,只不过换一种说法而已)。
这里主要介绍通过递归方式实现无限极分类
思路:
- 即所有待处理的数据进行包装成下标为主键id(pk)的数组,便于有p_id获取对应的父栏目。
- 对包装的数据进行循环,如果为根节点,则将其引用添加到树中,否则,将其引用添加到其父类的子元素中。这样虽然树中,只是添加了根节点,但是每个根节点如果有子元素,其中包含了子元素的引用。故能形成树型。
代码如下:
<?php
$arr = [
['id' => 1, 'name' => '父1', 'p_id' => 0],
['id' => 2, 'name' => '父2', 'p_id' => 0],
['id' => 3, 'name' => '父3', 'p_id' => 0],
['id' => 4, 'name' => '儿1-1', 'p_id' => 1],
['id' => 5, 'name' => '儿1-2', 'p_id' => 1],
['id' => 6, 'name' => '儿1-3', 'p_id' => 1],
['id' => 7, 'name' => '儿2-1', 'p_id' => 2],
['id' => 8, 'name' => '儿2-1', 'p_id' => 2],
['id' => 9, 'name' => '儿3-1', 'p_id' => 3],
['id' => 10, 'name' => '儿3-1-1', 'p_id' => 9],
['id' => 11, 'name' => '儿1-1-1', 'p_id' => 4],
['id' => 12, 'name' => '儿2-1-1', 'p_id' => 7],
];
/**
* 无限级分类
*
* @param array $origionArr 要进行分类的数组。(备注:这里最好使用"&$var"的形式,以便的减轻服务器内存压力)
* @param int $p_id
* @return array
*/
function infiniteOrder(&$origionArr, $p_id = 0)
{
$result = [];
foreach ($origionArr as $value) {
if ($value['p_id'] !== $p_id) continue;
$value['children'] = infiniteOrder(
$origionArr,
$value['id']
);
$result[] = $value;
}
return $result;
}
var_dump(infiniteOrder($arr));