首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP索引数组到嵌套关联数组

PHP索引数组到嵌套关联数组
EN

Stack Overflow用户
提问于 2018-06-07 04:48:25
回答 1查看 34关注 0票数 0

我需要根据特定的规则将简单数组转换为嵌套数组。我已经实现了,但我正在寻找更好的解决方案。

简单:

代码语言:javascript
复制
array(4) {
  [0]=>
  array(2) {
    ["id"]=>
    string(2) "11"
    ["type"]=>
    int(3)
  }
  [1]=>
  array(2) {
    ["id"]=>
    string(2) "10"
    ["type"]=>
    int(2)
  }
  [2]=>
  array(2) {
    ["id"]=>
    string(1) "1"
    ["type"]=>
    int(1)
  }
  [3]=>
  array(2) {
    ["id"]=>
    string(1) "0"
    ["type"]=>
    int(1)
  }
}

预期效果:

代码语言:javascript
复制
array(1) {
  [0]=>
  array(2) {
    ["type"]=>
    int(1)
    ["child"]=>
    array(1) {
      [1]=>
      array(2) {
        ["type"]=>
        int(1)
        ["child"]=>
        array(1) {
          [10]=>
          array(2) {
            ["type"]=>
            int(2)
            ["child"]=>
            array(1) {
              [11]=>
              array(2) {
                ["type"]=>
                int(3)
                ["child"]=>
                array(0) {
                }
              }
            }
          }
        }
      }
    }
  }
}

我的解决方案(不是很令人满意):

代码语言:javascript
复制
$nestedArray = [];
    foreach ($simpleArray as $item)
    {
        if (!empty($nestedArray))
        {
            $array = $nestedArray;
            reset($array);
            $firstKey = key($array);
        }
        $nestedArray[$item['id']]['child'] = $nestedArray;
        $nestedArray[$item['id']]['type'] = $item['type'];
        if (!empty($firstKey))
        {
            unset($nestedArray[$firstKey]);
        }
    }

正如我所说的,我正在寻找更优雅的方式来实现这一点。规则非常简单:下一项都是前一项的子项。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 05:04:12

你可以使用递归:

代码语言:javascript
复制
function nest($arr) {
    return count($arr) ? ["type" => array_pop($arr)["type"], "child" => nest($arr)] : [];
}

对于您的示例输入,它将如下所示:

代码语言:javascript
复制
$simpleArray = [
    ["id" => "11", "type" => 3],
    ["id" => "10", "type" => 2],
    ["id" => "1", "type" => 1],
    ["id" => "0", "type" => 1]
];

function nest($arr) {
    return count($arr) ? ["type" => array_pop($arr)["type"], "child" => nest($arr)] : [];
}

$nested = nest($simpleArray));

$nested将具有以下值:

代码语言:javascript
复制
[
    "type" => 1,
    "child" => [
        "type" => 1,
        "child" => [
            "type" => 2,
            "child" => [
                "type" => 3,
                "child" => []
            ]
        ]
    ]
]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50729358

复制
相关文章

相似问题

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