無限級(jí)分類洽蛀,子孫樹的遞歸與迭代

```

$area = array(

array('id'=>1,'area'=>'北京','pid'=>0),

array('id'=>2,'area'=>'上海','pid'=>0),

array('id'=>3,'area'=>'四川','pid'=>0),

array('id'=>4,'area'=>'成都','pid'=>3),

array('id'=>5,'area'=>'海淀','pid'=>1),

array('id'=>6,'area'=>'龍泉','pid'=>4),

array('id'=>7,'area'=>'中關(guān)村','pid'=>5),

array('id'=>8,'area'=>'徐家匯','pid'=>2),

array('id'=>9,'area'=>'徐家匯商城','pid'=>8),

array('id'=>10,'area'=>'閔行區(qū)','pid'=>2),

array('id'=>11,'area'=>'華東師范','pid'=>10),

array('id'=>12,'area'=>'廣東','pid'=>0),

array('id'=>13,'area'=>'深圳','pid'=>12),

array('id'=>14,'area'=>'寶安','pid'=>13),

array('id'=>15,'area'=>'沙井','pid'=>14),

array('id'=>16,'area'=>'上南','pid'=>15),

array('id'=>17,'area'=>'南浦','pid'=>16),

array('id'=>18,'area'=>'松崗','pid'=>14),

array('id'=>19,'area'=>'江邊','pid'=>18),

array('id'=>20,'area'=>'光明','pid'=>13),

array('id'=>21,'area'=>'松福','pid'=>19),

);

//*******遞歸查找子子孫孫樹

function subtree($arr,$pid=0,$lev=1){

// static $subs = array();

$subs = array();

foreach($arr as $v){

if($v['pid'] == $pid){

$v['lev']= $lev;

$subs[] = $v;

$subs = array_merge($subs,subtree($arr,$v['id'],$lev+1));

}

}

return $subs;

}

// var_dump($area);

//*******遞歸查找子子孫孫樹2

function getTree($ar,$pid,$lev=0){

? ? static $tree=array();

? ? foreach ($ar as? $k=>$v) {

? ? ? ? if ($v['pid']==$pid) {

? ? ? ? ? ? $v['lev']=$lev;

? ? ? ? ? ? $tree[]=$v;

? ? ? ? ? ? unset($ar[$k]);

? ? ? ? ? ? getTree($ar,$v['id'],$lev+1);

? ? ? ? }


? ? }

? ? return $tree;

}

//*******不用遞歸,用迭代法查找子子孫孫樹

function DTree($arr,$pid=0){

? ? $task = array($pid);//任務(wù)表

? ? $tree = array();//地區(qū)表

? ? while(!empty($task)){

? ? $flag = false;

? ? foreach ($arr as $k => $v) {

? ? if($v['pid'] == $pid){

? ? $tree[] = $v;

? ? array_push($task,$v['id']);//把最新的地區(qū)id入任務(wù)棧

? ? $pid = $v['id'];

? ? unset($arr[$k]);//把找到的單元unset掉

? ? $flag = true;//說明找到了子欄目

? ? }

? ? }

? ? if($flag == false){

? ? array_pop($task);

? ? $pid = end($task);

? ? }

? ? }

? ? return $tree;

}

echo '#################';

echo '

';

print_r(DTree($area,0));

echo '';

echo '#################';

$tree = subtree($area,0,$lev=1);

echo '

';

// print_r($area);

// print_r($tree);

echo '';

foreach ($tree as $v) {

? ? echo str_repeat('? ', $v['lev']).$v['area'].'
';

}

echo '


';

$aaa=array(

'a','b');

$bbb=array(

0=>'aa',1=>'bb','cc','dd');

print_r($aaa += $bbb);

// print_r(array_merge($aaa,$bbb));

//******在數(shù)組中查找面包屑導(dǎo)航见妒,根據(jù)ID查找他的所有祖先

function navtree($arr,$id){

static $tree = array();

foreach($arr as $v){

if($v['id'] == $id){

if($v['pid'] > 0){

navtree($arr,$v['pid']);

}

array_push($tree,$v) ;

}

}

return $tree;

}

//******在數(shù)組中查找面包屑導(dǎo)航孤荣,根據(jù)ID查找他的所有祖先

function navtree2($arr,$id){

$tree = array();

foreach($arr as $v){

if($v['id'] == $id){

if($v['pid'] > 0){

$tree = array_merge($tree,navtree($arr,$v['pid']));

}

$tree[]=$v;

}

}

return $tree;

}

//******,不用遞歸使用迭代的方法

function ntree($arr,$id){

$tree = array();

while($id !== 0){

foreach($arr as $v){

if($v['id']==$id){

$tree[]=$v;

$id = $v['pid'];

break;

}}}

return array_reverse($tree);

}

echo '


';

$res = ntree($area,17) ;

echo '


';

echo '

';

print_r($res) ;

echo '';

for($i=0;$i

echo ''.$res[$i]['area'].'';

if($i+1

echo '>>>';

}

}

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市盐股,隨后出現(xiàn)的幾起案子钱豁,更是在濱河造成了極大的恐慌,老刑警劉巖疯汁,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牲尺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡幌蚊,警方通過查閱死者的電腦和手機(jī)谤碳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來溢豆,“玉大人蜒简,你說我怎么就攤上這事′鱿桑” “怎么了搓茬?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)队他。 經(jīng)常有香客問我卷仑,道長(zhǎng),這世上最難降的妖魔是什么漱挎? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任系枪,我火速辦了婚禮,結(jié)果婚禮上磕谅,老公的妹妹穿的比我還像新娘私爷。我一直安慰自己,他們只是感情好膊夹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布衬浑。 她就那樣靜靜地躺著,像睡著了一般放刨。 火紅的嫁衣襯著肌膚如雪工秩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天进统,我揣著相機(jī)與錄音助币,去河邊找鬼。 笑死螟碎,一個(gè)胖子當(dāng)著我的面吹牛眉菱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掉分,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼俭缓,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼克伊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起华坦,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤愿吹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后惜姐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體犁跪,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年歹袁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耘拇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宇攻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出倡勇,到底是詐尸還是另有隱情逞刷,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布妻熊,位于F島的核電站夸浅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏扔役。R本人自食惡果不足惜帆喇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亿胸。 院中可真熱鬧坯钦,春花似錦、人聲如沸侈玄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽序仙。三九已至突颊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間潘悼,已是汗流浹背律秃。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留治唤,地道東北人棒动。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像肝劲,于是被迫代替她去往敵國和親迁客。 傳聞我的和親對(duì)象是個(gè)殘疾皇子郭宝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容