php - 将平面数组转换为多维

标签 php arrays multidimensional-array nested hierarchical-data

我有一个包含树数据的数组(按父 ID)。我想将它转换为多维数组。实现这一目标的最佳方法是什么?有什么短函数吗?

源数组:

$source = array(
    '0' => array(
            'Menu' => array(
                    'id' => 45
                    'name' => 'Home'
                    'parent_id' => 1
            )
    )
    '1' => array(
            'Menu' => array(
                    'id' => 47
                    'name' => 'Get started'
                    'parent_id' => 1
            )
    )
    '2' => array(
            'Menu' => array(
                    'id' => 72
                    'name' => 'Attributes'
                    'parent_id' => 71
            )
    )
    '3' => array(
            'Menu' => array(
                    'id' => 73
                    'name' => 'Headings'
                    'parent_id' => 71
            )
    )
    '4' => array(
            'Menu' => array(
                    'id' => 75
                    'name' => 'Links'
                    'parent_id' => 71
            )
    )
    '5' => array(
            'Menu' => array(
                    'id' => 59
                    'name' => 'Images'
                    'parent_id' => 75
            )
    )
    '6' => array(
            'Menu' => array(
                    'id' => 65
                    'name' => 'Lists'
                    'parent_id' => 75
            )
    )
);

源数组中缺少一些 parent 。我希望缺少父项的项目是根。结果数组:

$result = array(
    '0' => array(
            'Menu' => array(
                    'id' => 45
                    'name' => 'Home'
                    'parent_id' => 1
            )
            'Children' => array()
    )
    '1' => array(
            'Menu' => array(
                    'id' => 47
                    'name' => 'Get started'
                    'parent_id' => 1
            )
            'Children' => array()
    )
    '2' => array(
            'Menu' => array(
                    'id' => 72
                    'name' => 'Attributes'
                    'parent_id' => 71
            )
            'Children' => array()
    )
    '3' => array(
            'Menu' => array(
                    'id' => 73
                    'name' => 'Headings'
                    'parent_id' => 71
            )
            'Children' => array()
    )
    '4' => array(
            'Menu' => array(
                    'id' => 75
                    'name' => 'Links'
                    'parent_id' => 71
            )
            'Children' => array(
                    '0' => array(
                        'Menu' => array(
                            'id' => 59
                            'name' => 'Images'
                            'parent_id' => 75
                        )
                        'Children' => array()
                    )
                    '1' => array(
                        'Menu' => array(
                            'id' => 65
                            'name' => 'Lists'
                            'parent_id' => 75
                        )
                        'Children' => array()
                   )
            )
     )
);

更新:删除了方括号。

最佳答案

我认为 PHP 中没有内置函数可以执行此操作。

我尝试了以下代码,它似乎可以按照您描述的方式准备嵌套数组:

$nodes = array();
$tree = array();
foreach ($source as &$node) {
  $node["Children"] = array();
  $id = $node["Menu"]["id"];
  $parent_id = $node["Menu"]["parent_id"];
  $nodes[$id] =& $node;
  if (array_key_exists($parent_id, $nodes)) {
    $nodes[$parent_id]["Children"][] =& $node;
  } else {
    $tree[] =& $node;
  }
}

var_dump($tree);

我在为演示文稿编写的 PHP 类中编写了一个类似的算法 Hierarchical Models in SQL and PHP ,但我使用的是对象而不是普通数组。

关于php - 将平面数组转换为多维,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3261228/

相关文章:

Java 查找二维数组中的最小值和最大值。找到的最小值不正确

php - 从 curl 响应中获取可用数组,该响应被格式化为 php 数组

php - 协助在 php echo 中使用 £ 符号

php - 通过php动态设置mysql中的join类型

javascript - 使用 AJAX 提交帖子后,使用 AJAX 显示帖子

c++ - 根据另一个数组的值对一个数组进行排序?

arrays - 快速解析一个n维数组

php - 包含数据的可点击 HTML 表格能够在点击时显示更多数据

java - 将文本文件信息存储到数组中

java - 获取循环以添加数组的所有列