遞歸的一些例子

簡單的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)
  
...
  
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 個人學習批處理的初衷來源于實際工作;在某個迭代版本有個BS(安卓手游模擬器)大需求,從而在測試過程中就重復涉及到...
    Luckykailiu閱讀 4,779評論 0 11
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,766評論 18 399
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,948評論 18 139
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數據革命閱讀 12,228評論 2 33
  • 前言: 因在項目中使用到了權限校驗的問題,代碼中出現了BigInteger的setBit()和testBit()方...
    之乏閱讀 1,925評論 0 2