无限级分类之递归查找子孙树

时间:2021-12-04 12:40:32

利用递归查找子栏目以及子孙栏目,该代码仅供参看。

<?php 
/*
关系,分析出:
北京
海淀
昌平
山西
长治
县市1
小康村
县市2
太原
安徽
*/
$area = array(
array('id'=>1, 'name'=>'安徽', 'parent'=>0),
array('id'=>2, 'name'=>'海淀', 'parent'=>7),
array('id'=>3, 'name'=>'长治', 'parent'=>8),
array('id'=>4, 'name'=>'昌平', 'parent'=>7),
array('id'=>5, 'name'=>'县市1', 'parent'=>3),
array('id'=>6, 'name'=>'太原', 'parent'=>8),
array('id'=>7, 'name'=>'北京', 'parent'=>0),
array('id'=>8, 'name'=>'山西', 'parent'=>0),
array('id'=>9, 'name'=>'县市2', 'parent'=>3),
array('id'=>10, 'name'=>'小康村', 'parent'=>5),
);

//找子栏目
function findson($arr, $id){
//找儿子$son = array();foreach ($arr as $v) {if ($v['parent'] == $id) {$son[] = $v;}}return $son;}print_r(findson($area, 0));
//利用递归找子孙树//在函数中声明的static静态变量,无论函数调用多少次,只初始化一次,/**static总结1.修饰类的属性和方法为静态属性,静态方法2.static::method(),延迟绑定3.在函数中,声明静态变量**/function subtree($arr, $id, $lev=1){ //id表示我们最初查找的idstatic $subs = array();//$subs = array(); //如果不适用static,可以和array_merge搭配使用foreach ($arr as $v) {if ($v['parent'] == $id) {$v['lev'] = $lev;$subs[] = $v;subtree($arr,$v['id'], $lev+1); //最重要的一步//$subs = array_merge($subs, subtree($arr, $v['id'], $lev+1)); }}return $subs;}//print_r(subtree($area,0,1));$tree = subtree($area, 0, 1);foreach ($tree as $v) {echo str_repeat('  ', $v['lev']).$v['name'],'<br />';}