21,886
社区成员
发帖
与我相关
我的任务
分享
$ar = array('class01' => 0, 'class02' => 0, 'class03' => 'class02',
'class04' => 'class03', 'class05' => 'class04', 'class06' => 'class03');
$result = array();
function foo($i, $k) {
global $ar, $result;
if (array_key_exists($k, $ar) && $ar[$k] !== 0) {
$result[$i] .= '==>'.$ar[$k];
foo($i, $ar[$k]);
}
else {
$result[$i] .= '';
}
}
foreach($ar as $k => $v) foo($k, $k);
foreach($result as $k => $v) echo $k.$v."<br />";
/*
class01
class02
class03==>class02
class04==>class03==>class02
class05==>class04==>class03==>class02
class06==>class03==>class02
*/
//为便于处理,按邻接列表算法组织数据如下
$ar = array(
array( 'id' => 1, 'pid' => 0, 'name' => 'class01' ),
array( 'id' => 2, 'pid' => 0, 'name' => 'class02' ),
array( 'id' => 3, 'pid' => 2, 'name' => 'class03' ),
array( 'id' => 4, 'pid' => 3, 'name' => 'class04' ),
array( 'id' => 5, 'pid' => 4, 'name' => 'class05' ),
array( 'id' => 6, 'pid' => 3, 'name' => 'class06' ),
);
$t = find_parent($ar);
foreach($t as $v) {
echo $v['name'];
while($v['parent']) {
$v = array_pop($v['parent']);
echo " ==> $v[name]";
}
echo '<br>';
}