貼一個無限極分類的算法

貼一個無限極分類的算法,作個筆記。垃圾的csdnphp

<?php
namespace app\index\controller;

class Index
{
    
    public function study(){
        $city_arr = [
            ['id'=>1,'name'=>'山東省','pid'=>0],
            ['id'=>2,'name'=>'河北省','pid'=>0],
            ['id'=>3,'name'=>'煙臺市','pid'=>1],
            ['id'=>4,'name'=>'威海市','pid'=>1],
            ['id'=>5,'name'=>'牟平區','pid'=>3],
            ['id'=>6,'name'=>'桃村鎮','pid'=>7],
            ['id'=>7,'name'=>'棲霞市','pid'=>3],
            ['id'=>8,'name'=>'唐家泊鎮','pid'=>7],
            ['id'=>9,'name'=>'後野村','pid'=>8],
            ['id'=>10,'name'=>'田裏村','pid'=>8]
        ];
        
        $city_f = $this->make_tree($city_arr);
        return json($city_f);
    }
    
    public function make_tree($arr,$mkey='id',$pkey='pid',$level=0,$ckey='child'){
        $tree = [];
        $in_arr = [];
        
        //提取索引到主鍵中
        foreach ($arr as $key=>$value){
          $in_arr[$value[$mkey]]  = $value;
        }

        //pid爲0的直接返回 不爲零則找到上級,放在上級目錄下面
        foreach ($in_arr as $key=>$value){
          if($value[$pkey] == $level){
              $tree[] = &$in_arr[$key];
          }else{
              $in_arr[$value[$pkey]][$ckey][] = &$in_arr[$key];
          }
        }

        return $tree;
    }
}
相關文章
相關標籤/搜索