当前位置: 首页 > 面试题库 >

将平面数组转换为多维

容修贤
2023-03-14
问题内容

我有一个包含树数据的数组(按父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
            )
    )
);

源数组中缺少某些父母。我希望缺少父项的项成为根。结果数组:

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

我在为演示文稿SQL和PHP中的层次模型编写的PHP类中编写了类似的算法,但是我使用的是对象而不是普通数组。



 类似资料:
  • 问题内容: 我有一个无缘无故的多维数组 我想将此数组转换为这种形式 任何想法如何做到这一点? 问题答案: 假设此数组可能是(也可能不是)冗余嵌套,并且您不确定它的深度,可以为您展平它:

  • 问题内容: 将多维javascript数组转换为JSON的最佳方法是什么? 问题答案: 大多数流行的JavaScript框架都包含JSON实用程序功能。例如,jQuery具有直接调用url并将JSON结果作为对象加载的函数: http //docs.jquery.com/Getjson 但是,您可以从json网站获取开源JSON解析器和字符串化器: https://github.com/dougl

  • 这行代码给我抛出了异常:线程“main”中的异常java.lang.IndexOutofBoundsExc的索引:5,大小:5 我试图将数组列表转换成多维数组。

  • 我是JavaScript的新手,知道我可以像下面这样转换数组,但不知道如何将值转换为JavaScript的多维关联数组,在那里我可以用JavaScript打印值。

  • 问题内容: 我可以找到的所有示例都是mono,带有。如何使用PyAudio中的回调方法读取立体声或多声道输入并将其转换为2D NumPy数组或多个1D数组? 对于单声道输入,如下所示: 但是不适用于立体声输入,该数组的长度是原来的两倍,因此我假设通道是交错的或类似的东西,但是我找不到用于此的文档。 问题答案: 它似乎是逐样本交错的,首先是左声道。通过左声道输入的信号和右声道的静音,我得到: 因此,

  • 问题内容: 我有一个包含几个整数的数组。我已经向数组添加了一些值,但是现在我需要通过jQuery的方法将此数组发送到页面。如何将其转换为JSON对象进行发送? 问题答案: 向后兼容的脚本:https : //github.com/douglascrockford/JSON- js/blob/master/json2.js 并致电: 注意: JSON对象现在是大多数现代Web浏览器(IE 8及更高版