首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据需要从以下父子结果集中创建深度不受限制的多维数组

如何根据需要从以下父子结果集中创建深度不受限制的多维数组
EN

Stack Overflow用户
提问于 2019-03-28 10:05:15
回答 2查看 65关注 0票数 0

我有以下结果集

我需要创建一个这样的数组

代码语言:javascript
运行
复制
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) {
  }
}

如你所见,数组只有两层深。我需要创建一个数组,只要有更多的子数组并且没有重复,它就会无限下降。

编辑:我也欢迎任何其他有效的解决方案来解决这个问题。最终结果应该是拥有一个按层次顺序排列的数组中所有类别的列表。

EN

回答 2

Stack Overflow用户

发布于 2019-03-28 12:03:04

用于创建具有2个lvl的数组的脚本示例

你必须使用递归结构函数:

代码语言:javascript
运行
复制
<?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);
票数 0
EN

Stack Overflow用户

发布于 2019-03-29 16:16:35

这个站点上有很多递归函数代码的例子,但几乎所有的例子都是从孩子开始,一直到父母。在我的例子中,我需要从父母开始,一直到孩子。

因此,我能够通过编写一个递归函数来解决这个问题,如下所示:

代码语言:javascript
运行
复制
            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);
                }
            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55389135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档