寻找子树和子孙树 ,家谱树

$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: 在函数/方法中,声明静态变量用
***/


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值