为了账号安全,请及时绑定邮箱和手机立即绑定

从数组列表创建数组树

从数组列表创建数组树

PHP
12345678_0001 2019-08-12 17:05:00
从数组列表创建数组树我有一个这样的列表:array(   array(id=>100, parentid=>0, name=>'a'),   array(id=>101, parentid=>100, name=>'a'),   array(id=>102, parentid=>101, name=>'a'),   array(id=>103, parentid=>101, name=>'a'),)但是更大,所以我需要一种有效的方法将它变成像这样的结构树:array(   id=>100, parentid=>0, name=>'a', children=>array(     id=>101, parentid=>100, name=>'a', children=>array(       id=>102, parentid=>101, name=>'a',       id=>103, parentid=>101, name=>'a',     )   ))我不能使用像嵌套集或像becoas这样的东西,我可以在我的数据库中添加左右值。有任何想法吗?
查看完整描述

3 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

这就是我解决它的方式:

$arr = array(
  array('id'=>100, 'parentid'=>0, 'name'=>'a'),
  array('id'=>101, 'parentid'=>100, 'name'=>'a'),
  array('id'=>102, 'parentid'=>101, 'name'=>'a'),
  array('id'=>103, 'parentid'=>101, 'name'=>'a'),);$new = array();foreach ($arr as $a){
    $new[$a['parentid']][] = $a;}$tree = createTree($new, array($arr[0]));print_r($tree);function createTree(&$list, $parent){
    $tree = array();
    foreach ($parent as $k=>$l){
        if(isset($list[$l['id']])){
            $l['children'] = createTree($list, $list[$l['id']]);
        }
        $tree[] = $l;
    } 
    return $tree;}


查看完整回答
反对 回复 2019-08-12
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

如果你需要超过1个parentid [0]元素,小修复:)

$arr = array(
  array('id'=>100, 'parentid'=>0, 'name'=>'a'),
  array('id'=>101, 'parentid'=>100, 'name'=>'a'),
  array('id'=>102, 'parentid'=>101, 'name'=>'a'),
  array('id'=>103, 'parentid'=>101, 'name'=>'a'),);$new = array();foreach ($arr as $a){
    $new[$a['parentid']][] = $a;}$tree = createTree($new, $new[0]); // changedprint_r($tree);function createTree(&$list, $parent){
    $tree = array();
    foreach ($parent as $k=>$l){
        if(isset($list[$l['id']])){
            $l['children'] = createTree($list, $list[$l['id']]);
        }
        $tree[] = $l;
    } 
    return $tree;}


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 730 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信