从数组列表创建数组树

从数组列表创建数组树

我有一个这样的列表:

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这样的东西,我可以在我的数据库中添加左右值。有任何想法吗?


12345678_0001
浏览 731回答 3
3回答

翻翻过去那场雪

这就是我解决它的方式:$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;}

慕哥6287543

如果你需要超过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;}
打开App,查看更多内容
随时随地看视频慕课网APP