/**
* 親ノードのツリー配列を作成します
* パラメータ
* $ar 配列、隣接リストに編成されたデータ
* $id 配列内の主キーまたは関連キー名としての添え字
* $pid 親キーとしての添え字配列内の、または関連付けられたキー名
* 多次元配列を返します
**/
function find_parent($ar, $id='id', $pid='pid') {
foreach( $ar as $v) $t[$v[$id]] = $v;
foreach ($t as $k => $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, $id='id', $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'=>'grandfather '),
array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父親'),
array('ID'=>3, 'PARENT'=> 1, '名前'=>'叔父'),
配列('ID'=>4, '親'=>2, '名前'=>'自分'),
配列('ID'= >5, '親'=>4, '名前'=>'息子'),
);
$p = find_parent($data, 'ID', 'PARENT');
$c = find_child($data, 'ID', 'PARENT');
Array
(
[1] => 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] => > [5] =>名前] =>息子
)
)
http://www.bkjia.com/PHPjc/756337.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/756337.html技術記事次のように、2 つのツリー配列操作関数のコードを再帰なしでコピーします。 /** * 親ノードのツリー配列を作成します* パラメーター* $ar 配列、隣接リスト モードで編成されたデータ* $id 配列...