发布两个不用递归的树形数组构造函数【解释】

function find_parent($ar, $id='id', $pid='pid') { 
	echo '<pre>';
  	foreach($ar as $v) $t[$v[$id]] = $v;
 
  	foreach ($t as $k => $item){
	//print_r($k);//12345
	//print_r($item[$pid]);//01421
    if($item[$pid]){
		#祖父,自己,父亲,祖父(叔伯?和父亲同级所以不用考虑)
		//print_r($t[$item[$pid]]);//$t[1],$t[4],$t[2],$t[1]
		
      	if(!isset($t[$item[$pid]]['parent'][$item[$pid]])){
         	$t[$item[$id]]['parent'][$item[$pid]]=$t[$item[$pid]]; #注意
		}
    }
  }
  //print_r($t);
  //return $t;
}

function find_child($ar, $id='id', $pid='pid') {
	echo '<pre>';
  	foreach($ar as $v) $t[$v[$id]] = $v;

  	foreach ($t as $k => $item){
	//print_r($k);//12345
	//print_r($item[$pid]);//01421
    if($item[$pid]) {//1421
      	$t[$item[$pid]]['child'][$item[$id]]=$t[$item[$id]]; #注意
    	}
  	}
	print_r($t);
  	//return $t;
}


$data = array(
  array('id'=>1, 'pid'=>0, 'NAME'=>'祖父'),
  array('id'=>2, 'pid'=>1, 'NAME'=>'父亲'),
  array('id'=>3, 'pid'=>4, 'NAME'=>'儿子'),
  array('id'=>4, 'pid'=>2, 'NAME'=>'自己'),
  array('id'=>5, 'pid'=>1, 'NAME'=>'叔伯'),
);

$p = find_parent($data);
$c = find_child($data);

echo '<pre>';
$c;
//print_r($p);
//print_r($c);


找父级的结果:

Array
(
    [1] => Array
        (
            [id] => 1
            [pid] => 0
            [NAME] => 祖父
        )

    [2] => Array
        (
            [id] => 2
            [pid] => 1
            [NAME] => 父亲
            [parent] => Array
                (
                    [1] => Array
                        (
                            [id] => 1
                            [pid] => 0
                            [NAME] => 祖父
                        )

                )

        )

    [3] => Array
        (
            [id] => 3
            [pid] => 4
            [NAME] => 儿子
            [parent] => Array
                (
                    [4] => Array
                        (
                            [id] => 4
                            [pid] => 2
                            [NAME] => 自己
                        )

                )

        )

    [4] => Array
        (
            [id] => 4
            [pid] => 2
            [NAME] => 自己
            [parent] => Array
                (
                    [2] => Array
                        (
                            [id] => 2
                            [pid] => 1
                            [NAME] => 父亲
                            [parent] => Array
                                (
                                    [1] => Array
                                        (
                                            [id] => 1
                                            [pid] => 0
                                            [NAME] => 祖父
                                        )

                                )

                        )

                )

        )

    [5] => Array
        (
            [id] => 5
            [pid] => 1
            [NAME] => 叔伯
            [parent] => Array
                (
                    [1] => Array
                        (
                            [id] => 1
                            [pid] => 0
                            [NAME] => 祖父
                        )

                )

        )

)

找子级的结果:

Array
(
    [1] => Array
        (
            [id] => 1
            [pid] => 0
            [NAME] => 祖父
            [child] => Array
                (
                    [2] => Array
                        (
                            [id] => 2
                            [pid] => 1
                            [NAME] => 父亲
                        )

                    [5] => Array
                        (
                            [id] => 5
                            [pid] => 1
                            [NAME] => 叔伯
                        )

                )

        )

    [2] => Array
        (
            [id] => 2
            [pid] => 1
            [NAME] => 父亲
            [child] => Array
                (
                    [4] => Array
                        (
                            [id] => 4
                            [pid] => 2
                            [NAME] => 自己
                            [child] => Array
                                (
                                    [3] => Array
                                        (
                                            [id] => 3
                                            [pid] => 4
                                            [NAME] => 儿子
                                        )

                                )

                        )

                )

        )

    [3] => Array
        (
            [id] => 3
            [pid] => 4
            [NAME] => 儿子
        )

    [4] => Array
        (
            [id] => 4
            [pid] => 2
            [NAME] => 自己
            [child] => Array
                (
                    [3] => Array
                        (
                            [id] => 3
                            [pid] => 4
                            [NAME] => 儿子
                        )

                )

        )

    [5] => Array
        (
            [id] => 5
            [pid] => 1
            [NAME] => 叔伯
        )

)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值