递归算法,无限分级树形结构
直接上代码
$array = json_decode('[{"id":1,"parentId":0,"value":"肉"},{"id":2,"parentId":0,"value":"蔬菜"},{"id":3,"parentId":0,"value":"水果"},{"id":4,"parentId":1,"value":"猪肉"},{"id":5,"parentId":1,"value":"羊肉"},{"id":6,"parentId":4,"value":"猪腿"},{"id":7,"parentId":2,"value":"菠菜"}]', true);
echo "<pre>";
/**
* 递归整理数组显示树形结构
* @param $arr 数据集合(引用参数)
* @param $pid 父id
* @return array
*/
function arrayTree(&$arr, $pid){
//结果
$data = [];
foreach ($arr as $k => $v){
if ($v['parentId'] == $pid){
//数组下标
$index = count($data);
$data[$index] = $v;
//去掉已查询的数据,因为是引用参数,减少内存地址中的数据
unset($arr[$k]);
//所有层级都有child节点
$data[$index]['child'] = arrayTree($arr, $v['id']);
/*
//没有子节点则没有child节点,数据结构不统一
if ($info = digui($arr, $v['id'])){
$data[$index]['child'] = $info;
}*/
}
}
return $data;
}
print_r(json_encode(arrayTree($array, 0), JSON_UNESCAPED_UNICODE));
返回结果
[{"id":1,"parentId":0,"value":"肉","child":[{"id":4,"parentId":1,"value":"猪肉","child":[{"id":6,"parentId":4,"value":"猪腿","child":[]}]},{"id":5,"parentId":1,"value":"羊肉","child":[]}]},{"id":2,"parentId":0,"value":"蔬菜","child":[{"id":7,"parentId":2,"value":"菠菜","child":[]}]},{"id":3,"parentId":0,"value":"水果","child":[]}]