php之利用遞歸寫無限極分類
<?php //無限極分類 //parent 的值,是該欄目的父欄目的id 反之是 /*0 安徽 合肥 北京 海澱 中關村 上地 河北 石家莊 */ $area = array( array('id'=>1,'name'=>'安徽','parent'=>0), array('id'=>2,'name'=>'北京','parent'=>0), array('id'=>3,'name'=>'海澱','parent'=>2), array('id'=>4,'name'=>'中關村','parent'=>3), array('id'=>5,'name'=>'合肥','parent'=>1), array('id'=>6,'name'=>'上地','parent'=>3), array('id'=>7,'name'=>'河北','parent'=>0), array('id'=>8,'name'=>'石家莊','parent'=>7), ); /* 1.是找指定欄目的子孫欄目,即子孫樹 2.是找指定欄目的父欄目/父父欄目……頂級欄目,即家譜樹 */ //找子欄目 function findson($arr,$id=0) { //$id欄目的兒子有哪些呢? //A:數組循環一遍,誰的parent的值 = $id ,誰就是他的兒子 $sons = array(); //子欄目數組 foreach ($arr as $v) { if ($v['parent'] == $id) { $sons[] = $v; } } return $sons; } //print_r(findson($area,0)); //找子孫樹 靜態屬性調用 /* 在函數中聲明的static靜態變量 無論此函數調用多少次,隻初始化一次 以後直接沿用該變量 在遞歸時,很有用 static 總結 1.修飾類的屬性與方法為靜態屬性,靜態方法 2.static::method(),延遲綁定 3.在函數/方法中,聲明靜態變量用 */ function subtree($arr,$id=0,$lev=1) { static $subs = array(); //子孫數組 foreach ($arr as $v) { if ($v['parent'] == $id) { $v['lev'] = $lev; $subs[] = $v; //舉例說array('id'=>1,'name'=>'安徽','parent'=>0), subtree($arr,$v['id'],$lev+1); } } return $subs; } /*print_r(subtree($area,0,1)); $tree = subtree($area,0,1); foreach ($tree as $v) { # code... echo str_repeat(' ',$v['lev']),$v['name'],'<br />'; } */ //第二種不用靜態變量 function subtree2($arr,$id=0,$lev=1) { $subs = array(); //子孫數組 foreach ($arr as $v) { if ($v['parent'] == $id) { $v['lev'] = $lev; $subs[] = $v; //舉例說array('id'=>1,'name'=>'安徽','parent'=>0), $subs = array_merge($subs, subtree2($arr,$v['id'],$lev+1)); } } return $subs; } $tree = subtree2($area,0,1); foreach ($tree as $v) { echo str_repeat(' ',$v['lev']),$v['name'],'<br />'; } ?>

最後更新:2017-04-04 02:25:10