簡單的demo
function test($n){
if($n>0){
echo $n,",";
test($n-1);
echo $n,",";
}
}
test(5);//5,4,3,2,1,1,2,3,4,5,
解讀理解
- 當$n=5開始執行時,最后一行echo始終是掛起的,等到$n=0的時候,才會將掛起的echo一個個輸出
關于無限分類的demo
function tree($arr,$pid=0,$level=0){
static $res=array();
foreach($arr as $v){
if($v['pid'] == $pid){
$v['level'] = $level;
$res[] = $v;
tree($arr,$v['id'],$level+1);
}
}
return $res;
}
解讀理解
- 找到pid=0作為當前節點,在來查找子分類時,遍歷先掛起,依次逐層這樣查找子分類,都將遍歷掛起,當所有遍歷結束,再無子分類后,就返回到pid=0的節點,這時再將掛起的依次逐層遍歷出來
商城中展示商品分類的效果
我們需要將平行的二維數組轉成包含關系的多維數組
$cat = array(
array('cat_id'=>1,'cat_name'=>'服裝','pid'=>0),
array('cat_id'=>2,'cat_name'=>'家用電器','pid'=>0),
array('cat_id'=>3,'cat_name'=>'男裝','pid'=>1),
array('cat_id'=>4,'cat_name'=>'女裝','pid'=>1),
array('cat_id'=>5,'cat_name'=>'襯衫','pid'=>3),
array('cat_id'=>6,'cat_name'=>'牛仔褲','pid'=>3),
array('cat_id'=>7,'cat_name'=>'裙子','pid'=>4),
);
//轉成包含關系的多維數組
$res = array(
array(
'cat_id'=>1,
'cat_name'=>'服裝',
'pid'=>0,
'child'=>array(
array(
'cat_id'=>3,
'cat_name'=>'男裝',
'pid'=>1,
'child'=>array(
array('cat_id'=>5,'cat_name'=>'襯衫','pid'=>3),
array('cat_id'=>6,'cat_name'=>'牛仔褲','pid'=>3)
)
)
array(
'cat_id'=>4,
'cat_name'=>'女裝',
'pid'=>1,
'child'=>array(
array('cat_id'=>7,'cat_name'=>'裙子','pid'=>4),
)
)
)
)
);
因為我們需要這種包含關系的多維數組,所以通過遞歸來完成
public function child($arr,$pid=0){
$res = array();
foreach($arr as $v){
if($v['pid'] == $pid){
$v['child'] = $this->child($arr,$v['cat_id']);
$res[] = $v;
}
}
return $res;
}
最后在前臺頁面上輸出
foreach($cat as $v)
...
foreach($v['child'] as $v1)
...
foreach($v1['child'] as $v2)
...