两个不用递归的树形数组操作函数
/**<BR> * 创建父节点树形数组<BR> * 参数<BR> * $ar 数组,邻接列表方式组织的数据<BR> * $id 数组中作为主键的下标或关联键名<BR> * $pid 数组中作为父键的下标或关联键名<BR> * 返回 多维数组<BR> **/<BR>function find_parent($ar, $id='id', $pid='pid') { <BR> foreach($ar as $v) $t[$v[$id]] = $v;<BR> foreach ($t as $k => $item){<BR> if( $item[$pid] ){<BR> if( ! isset($t[$item[$pid]]['parent'][$item[$pid]]) )<BR> $t[$item[$id]]['parent'][$item[$pid]] =& $t[$item[$pid]];<BR> }<BR> } <BR> return $t;<BR>}</P><P><BR>/**<BR> * 创建子节点树形数组<BR> * 参数<BR> * $ar 数组,邻接列表方式组织的数据<BR> * $id 数组中作为主键的下标或关联键名<BR> * $pid 数组中作为父键的下标或关联键名<BR> * 返回 多维数组<BR> **/<BR>function find_child($ar, $id='id', $pid='pid') {<BR> foreach($ar as $v) $t[$v[$id]] = $v;<BR> foreach ($t as $k => $item){<BR> if( $item[$pid] ) {<BR> $t[$item[$pid]]['child'][$item[$id]] =& $t[$k];<BR> }<BR> }<BR> return $t;<BR>}<BR>
使用例子:
$data = array(<BR> array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'),<BR> array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父亲'),<BR> array('ID'=>3, 'PARENT'=>1, 'NAME'=>'叔伯'),<BR> array('ID'=>4, 'PARENT'=>2, 'NAME'=>'自己'),<BR> array('ID'=>5, 'PARENT'=>4, 'NAME'=>'儿子'),<BR>);</P><P>$p = find_parent($data, 'ID', 'PARENT');<BR>$c = find_child($data, 'ID', 'PARENT');<BR>
执行效果:
Array<BR>(<BR> [1] => Array<BR> (<BR> [ID] => 1<BR> [PARENT] => 0<BR> [NAME] => 祖父<BR> [child] => Array<BR> (<BR> [2] => Array<BR> (<BR> [ID] => 2<BR> [PARENT] => 1<BR> [NAME] => 父亲<BR> [child] => Array<BR> (<BR> [4] => Array<BR> (<BR> [ID] => 4<BR> [PARENT] => 2<BR> [NAME] => 自己<BR> [child] => Array<BR> (<BR> [5] => Array<BR> (<BR> [ID] => 5<BR> [PARENT] => 4<BR> [NAME] => 儿子<BR> )<br><br> )<br><br> )<br><br> )<br><br> )<br><br> [3] => Array<BR> (<BR> [ID] => 3<BR> [PARENT] => 1<BR> [NAME] => 叔伯<BR> )<br><br> )<br><br> )<br><br> [2] => Array<BR> (<BR> [ID] => 2<BR> [PARENT] => 1<BR> [NAME] => 父亲<BR> [child] => Array<BR> (<BR> [4] => Array<BR> (<BR> [ID] => 4<BR> [PARENT] => 2<BR> [NAME] => 自己<BR> [child] => Array<BR> (<BR> [5] => Array<BR> (<BR> [ID] => 5<BR> [PARENT] => 4<BR> [NAME] => 儿子<BR> )<br><br> )<br><br> )<br><br> )<br><br> )<br><br> [3] => Array<BR> (<BR> [ID] => 3<BR> [PARENT] => 1<BR> [NAME] => 叔伯<BR> )<br><br> [4] => Array<BR> (<BR> [ID] => 4<BR> [PARENT] => 2<BR> [NAME] => 自己<BR> [child] => Array<BR> (<BR> [5] => Array<BR> (<BR> [ID] => 5<BR> [PARENT] => 4<BR> [NA<a style="color:transparent">来@源gao*daima.com搞@代#码网</a><strong>搞gaodaima代码</strong>ME] => 儿子<BR> )<br><br> )<br><br> )<br><br> [5] => Array<BR> (<BR> [ID] => 5<BR> [PARENT] => 4<BR> [NAME] => 儿子<BR> )<br><br>)<BR>