如何根据需要从以下父子结果集创建具有无限深度的多维数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据需要从以下父子结果集创建具有无限深度的多维数组相关的知识,希望对你有一定的参考价值。
我有以下结果集
我需要创建一个像这样的数组
array(11) {
["Science & engineering"]=>
array(3) {
["Physics"]=>
array(1) {
["Work & energy"]=>
array(0) {
}
}
["Chemistry"]=>
array(0) {
}
["Biology"]=>
array(0) {
}
}
["Computing"]=>
array(0) {
}
["Arts & humanities"]=>
array(0) {
}
["Math"]=>
array(0) {
}
["Economics & finance"]=>
array(0) {
}
["Business"]=>
array(0) {
}
["Personal development"]=>
array(0) {
}
["Lifestyle"]=>
array(0) {
}
["Health & fitness"]=>
array(0) {
}
["Photography"]=>
array(0) {
}
}
正如您所看到的,阵列只有两层深。我需要创建一个数组,只要有更多的孩子而没有重复,这个数组会无限下降。
编辑:我也欢迎任何其他有效的解决方案来解决这个问题。最终结果应该是以一个简单的顺序列出一个数组中的所有类别。
答案
用于创建具有2 lvl的数组的脚本示例???
你将不得不使用递归结构函数:
<?php
function buildArray(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = buildArray($elements, $element['id']); //recursion
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
$result= buildArray($rows);
另一答案
在这个网站上有许多递归函数代码示例,但几乎所有这些都是从孩子开始并一直到父母。在我的情况下,我需要从父母开始,一直到孩子。
所以,我能够通过编写递归函数来解决问题,如下所示:
function findParentsParent($result,$category) {
global $subs;
foreach ($result as $row) {
if ($row['childName'] == $category['name']) {
$subs[] = $category['childName'];
findParentsParent($result,$row);
return array_reverse($subs);
} elseif ($row['childName'] == $category['childName']) {
$subs[] = $category['childName'];
$subs[] = $category['name'];
return array_reverse($subs);
}
}
}
以上是关于如何根据需要从以下父子结果集创建具有无限深度的多维数组的主要内容,如果未能解决你的问题,请参考以下文章
将多维数据集无限细分为 8 个更小的多维数据集的存储范例的名称是啥?
具有多维数组的 Foreach - Laravel Blade 模板