$area = array(
array('id'=>1,'name'=>'安徽','parent'=>0),
array('id'=>2,'name'=>'海淀','parent'=>7),
array('id'=>3,'name'=>'濉溪县','parent'=>5),
array('id'=>4,'name'=>'昌平','parent'=>7),
array('id'=>5,'name'=>'淮北','parent'=>1),
array('id'=>6,'name'=>'朝阳','parent'=>7),
array('id'=>7,'name'=>'北京','parent'=>0),
array('id'=>8,'name'=>'上地','parent'=>2),
array('id'=>9,'name'=>'九把刀','parent'=>8),
array('id'=>10,'name'=>'中华','parent'=>4),
);
//找子栏目 0是 找指定栏目的子栏目
function son($arr,$id){
$son=array();
foreach($arr as $val){
if($val['parent']==$id){
$son[]=$val;
}
}
return $son;
}
echo '<pre>';
$a=son($area,7);
print_r($a);
查找子孙树:
/*
function sons($arr,$id,$lev=1){
static $son=array(); function 里面的static 的 $son 只初始化一次~~开辟了一个新空间出来给它 重新调用函数 它的值都是上次改变以后的值~~~
foreach($arr as $val){
if($val['parent']==$id){
$val['lev']=$lev; //增加数组的单元~
$son[]=$val;
sons($arr,$val['id'],$lev+1);
}
}
return $son;
}
$b=sons($area,7); //先把结果搞成是数组 之后通过各种函数就好处理了~~~~所以先不要在函数里面想输出 指定格式
foreach($b as $k=>$v){ //而是先变成一个数组 在遍历 慢慢输入自己想要的方式~~
echo str_repeat('-',$v['lev']).$v['name'].'<br />';
}
//print_r($b);
*/
function sons($arr,$id,$lev=1){
$son=array(); //不用static
foreach ($arr as $val){
if($val['parent'] == $id){
$val['lev']=$lev;
$son[]=$val;
$son=array_merge($son,sons($arr,$val['id'],$lev+1)); array_merge()合并两个数组~
}
}
return $son;
}
$b=sons($area,7);
//print_r($b);
结果: 往下找
Array
(
[0] => Array
(
[id] => 2
[name] => 海淀
[parent] => 7
[lev] => 1
)
[1] => Array
(
[id] => 8
[name] => 上地
[parent] => 2
[lev] => 2
)
[2] => Array
(
[id] => 9
[name] => 九把刀
[parent] => 8
[lev] => 3
)
[3] => Array
(
[id] => 4
[name] => 昌平
[parent] => 7
[lev] => 1
)
[4] => Array
(
[id] => 10
[name] => 中华
[parent] => 4
[lev] => 2
)
[5] => Array
(
[id] => 6
[name] => 朝阳
[parent] => 7
[lev] => 1
)
家谱树:
function parent($arr,$id){
$par=array();
foreach($arr as $val){
if($val['id'] == $id){
$par[]=$val;
if($val['parent']!=0){
$par=array_merge(parent($arr,$val['parent']),$par) ;
}
}
}
return $par;
}
echo '<pre >';
$a=parent($area,10);
print_r($a);
结果:
Array
(
[0] => Array
(
[id] => 7
[name] => 北京
[parent] => 0
)
[1] => Array
(
[id] => 4
[name] => 昌平
[parent] => 7
)
[2] => Array
(
[id] => 10
[name] => 中华
[parent] => 4
)
)
/***
在函数中声明的static 静态变量,
无论此函数调用多少次,只初始化一次.
以后就会直接沿用该变量,
这在递归时,很有用.
static总结
1: 修饰类的属性与方法为静态属性,静态方法
2: static::method(), 延迟绑定
3: 在函数/方法中,声明静态变量用
***/