PHP树-不需要递归的实现方法

PHP树-不需要递归的实现方法

$item){ if( $item[$pid] ){ if( ! isset($t[$item[$pid]]['parent'][$item[$pid]]) ) $t[$item[$id]]['parent'][$item[$pid]] =& $t[$item[$pid]]; } } return $t; }

/**

  • 创建子节点树形数组
  • 参数
  • $ar 数组,邻接列表方式组织的数据
  • $id 数组中作为主键的下标或关联键名
  • $pid 数组中作为父键的下标或关联键名
  • 返回 多维数组
    **/
    function find_child($ar,$pid='pid') {
    foreach($ar as $v) $t[$v[$id]] = $v;
    foreach ($t as $k => $item){
    if( $item[$pid] ) {
    $t[$item[$pid]]['child'][$item[$id]] =& $t[$k];
    }
    }
    return $t;
    }

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

$p = find_parent($data,'ID','PARENT');
$c = find_child($data,'PARENT');
Print_r ($c);

执行效果:

Array ( [ID] => 1 [PARENT] => 0 [NAME] => 祖父 [child] => Array ( [2] => Array ( [ID] => 2 [PARENT] => 1 [NAME] => 父亲 [child] => Array ( [4] => Array ( [ID] => 4 [PARENT] => 2 [NAME] => 自己 [child] => Array ( [5] => Array ( [ID] => 5 [PARENT] => 4 [NAME] => 儿子 )
                    )

                )

            )

        )

      [3] => Array
        (
          [ID] => 3
          [PARENT] => 1
          [NAME] => 叔伯
        )

    )

)

[2] => Array
(
[ID] => 2
[PARENT] => 1
[NAME] => 父亲
[child] => Array
(
[4] => Array
(
[ID] => 4
[PARENT] => 2
[NAME] => 自己
[child] => Array
(
[5] => Array
(
[ID] => 5
[PARENT] => 4
[NAME] => 儿子
)

            )

        )

    )

)

[3] => Array
(
[ID] => 3
[PARENT] => 1
[NAME] => 叔伯
)

[4] => Array
(
[ID] => 4
[PARENT] => 2
[NAME] => 自己
[child] => Array
(
[5] => Array
(
[ID] => 5
[PARENT] => 4
[NAME] => 儿子
)

    )

)

[5] => Array
(
[ID] => 5
[PARENT] => 4
[NAME] => 儿子
)

)

以上这篇PHP树-不需要递归的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...