//要处理的数组
$arr = array(
array('id'=>1,'name'=>'分类1','pid'=>0),
array('id'=>2,'name'=>'分类2','pid'=>0),
array('id'=>3,'name'=>'分类3','pid'=>1),
array('id'=>4,'name'=>'分类4','pid'=>3),
array('id'=>5,'name'=>'分类5','pid'=>4),
array('id'=>6,'name'=>'分类6','pid'=>2),
array('id'=>7,'name'=>'分类7','pid'=>6),
array('id'=>8,'name'=>'分类8','pid'=>5),
array('id'=>9,'name'=>'分类9','pid'=>8),
);
echo getCatelujin(9);
/*
* @参数$id 当前分类ID
* @参数$depth 深度 0 则不考虑 一直寻找到最高 大于0说明深度是受限的
*/
function getCatelujin($id ,$depth = 0){
global $arr;
$str = ''; $id = (int)$id; $i = 0; $depth = (int)$depth;
while(true){
if($depth && $i >= $depth) break; //超过深度 跳出循环 避免死循环
if($id == 0) break; //但ID被替换后的值为0 说明是顶级了
$is_right = true;//限定条件 是否在数组内
foreach($arr as $k=>$v){//循环数组
$is_right = false;
if($v['id'] == $id){//条件
$is_right = true;
if(empty($str)){
$str = $v['name'];
}else{
$str = $v['name'] . ' > '.$str;//行程路径
}
$id = (int)$v['pid']; //重新赋值ID 进行循环下一个条件
unset($arr[$k]);//将取到的数据从数组中剔除
break;
}
}
if(!$is_right) break;
++$i;
}
return $str;
}
?>