|
/**
* Create parent Node tree array
* Parameter
* $ar Array, adjacency list of data organized by
* $id subscript or associated key name in the array as the primary key
* $pid subscript or associated key name in the array as the parent key
* Return multidimensional array
**/
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;
}
/**
* Create a child node tree array
* parameter
* $ar array, adjacency list to organize data
* $id the subscript or associated key name in the array as the primary key
* $pid subscript or associated key name in the array as the parent key
* returns the multidimensional array
**/
function Find_child ($ar, $id = ' id ', $pid = ' pid ') {
F Oreach ($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 ' => ' father '),
Array (' ID ' =>3, ' PARENT ' =>1, ' NAME ' => ' Uncle '),
Array (' ID ' =>4, ' PARENT ' =>2, ' NAME ' => ' own '),
Array (' ID ' =>5, ' PARENT ' =>4, ' NAME ' => ' son '),
);
$p = Find_parent ($data, ' ID ', ' parent ');
$c = Find_child ($data, ' ID ', ' PARENT ');
Print_r ($c);
|