php+mysql查询实现无限下级分类树输出示例

2019-05-02 22:07:15于丽

目标是将它转化为下面这种结构:

电脑
—笔记本
——-超级本
——-游戏本
—台式机
手机
—智能机
—功能机

用数组来表示的话,可以增加一个 children 键来存储它的子分类:

array(
  //1对应id,方便直接读取
  1 => array(
    'id'=>1,
    'name'=>'电脑',
    'pid'=>0,
    children=>array(
      &array(
        'id'=>3,
        'name'=>'笔记本',
        'pid'=>1,
        'children'=>array(
          //此处省略
        )
      ),
      &array(
        'id'=>4,
        'name'=>'台式机',
        'pid'=>1,
        'children'=>array(
          //此处省略
        )
      ),
    )
  ),
  //其他分类省略
)

处理过程:

$tree = array();
//第一步,将分类id作为数组key,并创建children单元
foreach($categories as $category){
  $tree[$category['id']] = $category;
  $tree[$category['id']]['children'] = array();
}
//第二部,利用引用,将每个分类添加到父类children数组中,这样一次遍历即可形成树形结构。
foreach ($tree as $k=>$item) {
  if ($item['pid'] != 0) {
    $tree[$item['pid']]['children'][] = &$tree[$k];
  }
}

print_r($tree);打印结果如下:

Array
(
  [1] => Array
    (
      [id] => 1
      [name] => 电脑
      [pid] => 0
      [children] => Array
        (
          [0] => Array
            (
              [id] => 3
              [name] => 笔记本
              [pid] => 1
              [children] => Array
                (
                  [0] => Array
                    (
                      [id] => 7
                      [name] => 超级本
                      [pid] => 3
                      [children] => Array
                        (
                        )
                    )
                  [1] => Array
                    (
                      [id] => 8
                      [name] => 游戏本
                      [pid] => 3
                      [children] => Array
                        (
                        )
                    )
                )
            )
          [1] => Array
            (
              [id] => 4
              [name] => 台式机
              [pid] => 1
              [children] => Array
                (
                )
            )
        )
    )
  [2] => Array
    (
      [id] => 2
      [name] => 手机
      [pid] => 0
      [children] => Array
        (
          [0] => Array
            (
              [id] => 5
              [name] => 智能机
              [pid] => 2
              [children] => Array
                (
                )
            )
          [1] => Array
            (
              [id] => 6
              [name] => 功能机
              [pid] => 2
              [children] => Array
                (
                )
            )
        )
    )
  [3] => Array
    (
      [id] => 3
      [name] => 笔记本
      [pid] => 1
      [children] => Array
        (
          [0] => Array
            (
              [id] => 7
              [name] => 超级本
              [pid] => 3
              [children] => Array
                (
                )
            )
          [1] => Array
            (
              [id] => 8
              [name] => 游戏本
              [pid] => 3
              [children] => Array
                (
                )
            )
        )
    )
  [4] => Array
    (
      [id] => 4
      [name] => 台式机
      [pid] => 1
      [children] => Array
        (
        )
    )
  [5] => Array
    (
      [id] => 5
      [name] => 智能机
      [pid] => 2
      [children] => Array
        (
        )
    )
  [6] => Array
    (
      [id] => 6
      [name] => 功能机
      [pid] => 2
      [children] => Array
        (
        )
    )
  [7] => Array
    (
      [id] => 7
      [name] => 超级本
      [pid] => 3
      [children] => Array
        (
        )
    )
  [8] => Array
    (
      [id] => 8
      [name] => 游戏本
      [pid] => 3
      [children] => Array
        (
        )
    )
)

								 
			 
相关文章 大家在看