二维数组根据 pid 以及 id 变为无限极分类状的数组

二维数组根据 pid 以及 id 变为无限极分类状的数组


将要转化的数组

$arr = [
    ['id'=>1,'pid'=>0,'name'=>'a'],
    ['id'=>2,'pid'=>1,'name'=>'b'],
    ['id'=>3,'pid'=>1,'name'=>'c'],
    ['id'=>4,'pid'=>2,'name'=>'d'],
    ['id'=>5,'pid'=>2,'name'=>'e'],
    ['id'=>6,'pid'=>3,'name'=>'f'],
    ['id'=>7,'pid'=>3,'name'=>'g'],
];

转化完毕的形式

array(3) {
  ["id"]=>
  int(1)
  ["name"]=>
  string(1) "a"
  ["children"]=>
  array(2) {
    [0]=>
    array(3) {
      ["id"]=>
      int(2)
      ["name"]=>
      string(1) "b"
      ["children"]=>
      array(2) {
        [0]=>
        array(2) {
          ["id"]=>
          int(4)
          ["name"]=>
          string(1) "d"
        }
        [1]=>
        array(2) {
          ["id"]=>
          int(5)
          ["name"]=>
          string(1) "e"
        }
      }
    }
    [1]=>
    array(3) {
      ["id"]=>
      int(3)
      ["name"]=>
      string(1) "c"
      ["children"]=>
      array(2) {
        [0]=>
        array(2) {
          ["id"]=>
          int(6)
          ["name"]=>
          string(1) "f"
        }
        [1]=>
        array(2) {
          ["id"]=>
          int(7)
          ["name"]=>
          string(1) "g"
        }
      }
    }
  }
}

核心代码

  function list_to_tree($list) {
        $tree = array();// 创建Tree
        if(is_array($list)) {
            // 创建基于主键的数组引用
            $refer = array();
            foreach ($list as $key => $data) {
                $refer[$data['id']] = &$list[$key];
            }
            foreach ($list as $key => $data) {
                // 判断是否存在parent
                $parentId = $data['pid'];
                if (0 == $parentId) {
                    $tree = &$list[$key];
                }else{
                    if (isset($refer[$parentId])) {
                        $parent = &$refer[$parentId];
                        $parent['children'][] = &$list[$key];
                    }
                }
            }
        }
        return $tree;
    }

到这里一个无限极分类就已经出来

    function jPid(&$tree){
        unset($tree['pid']);
        if(isset($tree['children'])){
            foreach($tree['children'] as $k=>$v){
                $this->jPid($tree['children'][$k]);
            }
        }
        return $tree;
    }

无限极分类
核心部分=&
&在php中是引用的意思,PHP 的引用允许用两个变量来指向同一个内容。意思是,当这样做时:

	<?php
    	$b =&$a;
    ?>

这意味着 $a 和 $b 指向了同一个变量。 $a 和 $b 在这里是完全相同的,这并不是 $a 指向了 $b 或者相反,而是 $a 和 $b 指向了同一个地方。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G佳伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值