php - 从数组列表创建数组树

标签 php arrays recursion tree

我有一个这样的列表:

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',
    )
  )
)

我不能使用嵌套集或类似的东西,因为我可以在我的数据库中添加左右值。 有任何想法吗?

最佳答案

好的,我就是这样解决的:

$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;
}

关于php - 从数组列表创建数组树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4196157/

相关文章:

javascript - 通过 (PHP) 从网页中提取 JavaScript 值

php - 从单选按钮内部检索查询结果

php - 在 php 中获取错误的 IP 地址

c++ - 创建 x 个数组

ruby - 对于最大的回文乘积问题(Project Euler),递归中的堆栈级别太深

c - 对整数的奇数位求和的递归函数

php - 使用浏览器时Redis不工作

arrays - 从 Meshgrid Matlab 创建一列数组

php - 正则表达式,如何将内容文本放入数组中?

recursion - Common-Lisp 中的递归阶乘函数