php实现无限极分类(多维数组 / 二维数组)形式

以下是本人整理出来的代码:

<?php

    // 测试数组数据
    $array = array(
      array('id'=>'1','title'=>'父级分类1','pid'=>'0'),
      array('id'=>'2','title'=>'父级分类2','pid'=>'0'),
      array('id'=>'3','title'=>'父级分类3','pid'=>'0'),
      array('id'=>'4','title'=>'子分类1','pid'=>'1'),
      array('id'=>'5','title'=>'子分类2','pid'=>'1'),
      array('id'=>'6','title'=>'子分类3','pid'=>'2')
    );

    // 实现二维数组形式
  function getTree1($array, $pid=0)
  {
    static $data = array();
    foreach($array as $key=>$val){
      if($val['pid'] == $pid){
        $data[] = $val;
        unset($array[$key]);
        getTree1($array, $val['id']);  // 进行递归
      }
    }
    return $data;
  }

 

  

  // 实现多维数组形式
  function getTree2($array)
  {
    $refer = array();
    $tree = array();
    foreach($array as $key=>$val){
      $refer[$val['id']] = &$array[$key];
    }
    foreach($array as $k => $v){
      $pid = $v['pid']; //获取当前分类的父级id
      if($pid == 0){
        $tree[] = &$array[$k]; //顶级栏目
      }else{
        if(isset($refer[$pid])){
          $refer[$pid]['son'][] = &$array[$k]; //如果存在父级栏目,则添加进父级栏目的子栏目数组中
        }
      }
    }
    return $tree;
  }

$trees = getTree1($array);
$trees = getTree2($array);
// 查看数据
echo '<pre>';
print_r($trees);
echo '</pre>';

 

posted @ 2020-08-30 13:00  齐云海  阅读(902)  评论(0编辑  收藏  举报