無限極分類輸出的方法

數據:this

$data = array(
  array(
    'id' => 1,
    'parent_id' => 0,
    'name' => 'first'
  ),
  array(
    'id' => 2,
    'parent_id' => 1,
    'name' => 'second'
  ),
  array(
    'id' => 3,
    'parent_id' => 2,
    'name' => 'third'
  ),
  array(
    'id' => 4,
    'parent_id' => 3,
    'name' => 'forth'
  ),
);遞歸

調用:$res = $this->make_tree1($data);io

封裝方法function

方法一:foreach循環foreach

  

//方法一:foreach循環實現無限極
public function make_tree($list,$pk='id',$pid='parent_id',$child='children',$root=0)
{
  $tree = array();
  $temp = array();
  foreach ($list as $data)
  {
    $temp[$data[$pk]] = $data;
  }
  foreach ($temp as $key =>$val)
  {
    if($val[$pid]==$root)
    { //表明跟節點
      $tree[]=& $temp[$key];
    }
    else
    {
    //找到其父類
    $temp[$val[$pid]][$child][]=& $temp[$key];
    }
  }
  return $tree;
}循環

 

//方法二:遞歸方法實現無限極
public function make_tree1($list,$pk='id',$pid='parent_id',$child='children',$root=0)
{
  $tree = array();
  foreach($list as $key=> $val)
  {
    if($val[$pid]==$root)
    {
      //獲取當前$pid全部子類
      unset($list[$key]);
      if(!empty($list))
      {
        $child = $this->make_tree1($list,$pk,$pid,$child,$val[$pk]);
        if(!empty($child))
        {
          $val['_child'] = $child;
        }
      }
      $tree[]=$val;
    }
  }
  return $tree;
}方法

相關文章
相關標籤/搜索