从数组列表创建数组树我有一个这样的列表: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 回答
![?](http://img1.sycdn.imooc.com/533e4c1500010baf02200220-100-100.jpg)
翻翻过去那场雪
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;}
![?](http://img1.sycdn.imooc.com/5333a1d100010c2602000200-100-100.jpg)
慕哥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;}
- 3 回答
- 0 关注
- 730 浏览
添加回答
举报
0/150
提交
取消