<?php
$arr=array(
array('id'=>'1','name'=>'吉林','parent'=>0),
array('id'=>'2','name'=>'北京','parent'=>0),
array('id'=>'3','name'=>'遼寧','parent'=>0),
array('id'=>'4','name'=>'吉林市','parent'=>1),
array('id'=>'5','name'=>'長春','parent'=>1),
array('id'=>'6','name'=>'海淀','parent'=>2),
array('id'=>'7','name'=>'大連','parent'=>3),
array('id'=>'8','name'=>'船營區','parent'=>4),
array('id'=>'9','name'=>'豐滿區','parent'=>4)
);
//找子欄目
function findson($arr,$id=0){
$sons=array();
foreach($arr as $v){
if($v['parent']==$id){
$sons[]=$v;
}
}
return $sons;
}
//var_dump(findson($arr,$id=1));
//找子孫樹
//用靜態變量
function subtree($arr,$id,$lev=1){
static $subs=array(); //static 只初始化一次
foreach($arr as $v){
if($v['parent']==$id){
$v['lev']=$lev;
$subs[]=$v;
subtree($arr,$v['id'],$lev+1);
//不用靜態變量
// $subs=array_merge($subs,subtree($arr,$v['id'],$lev+1));
}
}
return $subs;
}
/*
$tree=subtree($arr,$id=0,1);
foreach ($tree as $v){
echo str_repeat(' ',$v['lev']).$v['name']."<br/>";
}
*/
/**
家譜樹應用
麪包屑導航
首頁>手機類型>諾基亞>
**/
function familytree($area,$id){
static $tree=array();
foreach($area as $v){
if($v['id']==$id){
$tree[]=$v;
//判斷要不要繼續找父欄目
if($v['parent']>0){
familytree($area,$v['parent']);
//不用static
//array_merge($area,familytree($area,$v['parent']));
}
}
}
return $tree;
}
echo "<hr>";
//print_r(familytree($arr,9));
/*用迭代找家譜樹(推薦)*/
function familytree2($arr,$id){
$tree=array();
while($id!==0){
foreach($arr as $v){
if($v['id']==$id){
$tree[]=$v;
$id=$v['parent'];
break;
}
}
}
return $tree;
}
print_r(familytree2($arr,9));
?>
遞歸 迭代 得到家譜樹 子孫樹
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.