成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導航首頁 ? 技術教程 ? PHP迭代與遞歸實現無限級分類
全站頭部文字 我要出現在這里
PHP迭代與遞歸實現無限級分類 800 2023-12-08   

無限級分類是開發中常見的情況,因此本文對常見的無限極分類算法進行總結歸納.

1.循環迭代實現

$arr = [
  1=>['id'=>1,'name'=>'父1','father'=>NULL],
  2=>['id'=>2,'name'=>'父2','father'=>NULL],
  3=>['id'=>3,'name'=>'父3','father'=>NULL],
  4=>['id'=>4,'name'=>'兒1-1','father'=>1],
  5=>['id'=>5,'name'=>'兒1-2','father'=>1],
  6=>['id'=>6,'name'=>'兒1-3','father'=>1],
  7=>['id'=>7,'name'=>'兒2-1','father'=>2],
  8=>['id'=>8,'name'=>'兒2-1','father'=>2],
  9=>['id'=>9,'name'=>'兒3-1','father'=>3],
  10=>['id'=>10,'name'=>'兒3-1-1','father'=>9],
  11=>['id'=>11,'name'=>'兒1-1-1','father'=>4],
  12=>['id'=>12,'name'=>'兒2-1-1','father'=>7],
];
function generateTree($items){
  $tree = array();
  foreach($items as $item){
    if(isset($items[$item['father']])){
      $items[$item['father']]['son'][] = &$items[$item['id']]; 
    }else{
      $tree[] = &$items[$item['id']];
    }
  }
  return $tree;
}
$tree = generateTree($arr);
print_r(json_encode($tree));

輸出:

查看圖片

分析:

這個算法利用了循環迭代,將線性結構按照父子關系以樹形結構輸出,算法的關鍵在于使用了引用.

優點:速度快,效率高.

缺點:數組的key值必須與id值相同,不便于取出數據(同樣使用迭代獲取數據)

2.遞歸實現

$arr = [
  0=>['id'=>1,'name'=>'父1','father'=>0],
  1=>['id'=>2,'name'=>'父2','father'=>0],
  2=>['id'=>3,'name'=>'父3','father'=>0],
  3=>['id'=>4,'name'=>'兒1-1','father'=>1],
  4=>['id'=>5,'name'=>'兒1-2','father'=>1],
  5=>['id'=>6,'name'=>'兒1-3','father'=>1],
  6=>['id'=>7,'name'=>'兒2-1','father'=>2],
  7=>['id'=>8,'name'=>'兒2-1','father'=>2],
  8=>['id'=>9,'name'=>'兒3-1','father'=>3],
  9=>['id'=>10,'name'=>'兒3-1-1','father'=>9],
  10=>['id'=>11,'name'=>'兒1-1-1','father'=>4],
  11=>['id'=>12,'name'=>'兒2-1-1','father'=>7],
];
function generateTree($arr,$id,$step){
  static $tree=[];
  foreach($arr as $key=>$val) {
    if($val['father'] == $id) {
      $flg = str_repeat('└?',$step);
      $val['name'] = $flg.$val['name'];
      $tree[] = $val;
      generateTree($arr , $val['id'] ,$step+1);
    }
  }
  return $tree;
}
$tree = generateTree($arr,0,0);
foreach ($tree as $val){
  echo $val['name'].'<br>';
}

輸出:

查看圖片

分析:

利用了遞歸,數組的key值與id值可以不相同,最后以順序的結構輸出數組

優點:方便遍歷,查找父子元素

缺點:php不擅長遞歸,數據量大的情況下效率會顯著降低

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持綠夏網。


主站蜘蛛池模板: 成龙游戏| 想要女朋友电影| 母5| 布衣神相国语电视剧在线看完整版| 女人 电影| 夏日福星 电影| 日本电影纯爱| 绿门背后| 浙江卫视节目回放入口| 干了一个月的家具导购| 性视频播放| 五年级下册谐音小故事| 侠侣探案| 美女亲热视频| 决胜法庭演员表| 看香谱二十四法图解| 好像也没那么热血沸腾电影免费观看 | 少女秩序| 新爱情乐园| 日本女人交配视频| 韩宇辰| 卡通频道| 演员于晓光| 公司辞退员工的合法流程及赔偿| 你是我心中的太阳泰剧| 少年派3免费观看完整版电视剧| 邓佳佳| 美女操视频| 天津电视台体育频道节目单| 古今大战秦俑情电影| 五年级上册第一单元数学试卷| 神宫寺奈绪从早做到晚上| 张国立主演电视剧全剧大全免费观看| 艳妻互换| www.douyin.com官网| 托比·瑞格波| 美人鱼的电影| 晓彤| 欧美变态sososo另类| 男人天堂视频| 白鲸 电影|

!!!站長長期在線接!!!

網站、小程序:定制開發/二次開發/仿制開發等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103