【问题标题】:Access multi-level array in php to get middle keysphp中访问多级数组获取中间键
【发布时间】:2021-08-10 03:55:23
【问题描述】:

我有一个如下所示的数组结构。

$arr = [ "level1" =>
         ["level2" =>
          ["level3" =>
           [ "key1" => "value1",
             "key2" => "value2",
               ]
              ]
             ],
         [ "level2-A" =>
           ["level3-A" =>
            [  "key1" => "value1-A",
               "key2" => "value2-A",
                ]
               ]
             ],
         "level2-B" => "value",
         "level2-c" => "value",

    ];

预期输出如下:

[ "level3" => "value2",
  "level3-A" => "value2-A",
  "level2-B" => "value",
];

我尝试过使用 array_map_reduce,但只能获取到 level2。

【问题讨论】:

  • 您能否分享您尝试过的实际代码并解释所需结果背后的逻辑?
  • 如果您理解了示例数组,这也会有所帮助。 7 个括号是开的,5 个是闭的。
  • 这毫无意义。
  • 它总是3级键,有一次例外,我可以单独处理。
  • 这个数组结构对我来说没有意义。 $arr 是关联元素和索引元素的组合。以level2-A 开头的数组是否应该有level2 键?

标签: php multidimensional-array mapreduce associative-array


【解决方案1】:

使用嵌套循环。在尝试循环之前检查每个级别是否是一个数组。

$result = [];
foreach ($arr as $key1 => $level1) {
    if (is_array($level1)) {
        foreach ($level1 as $key2 => $level2) {
            if (is_array($level2)) {
                foreach ($level2 as $key3 => $level3) {
                    foreach ($level3 as $value) {
                        // loop to the end of the array
                    }
                    $result[$key3] = $value;
                }
            }
        }
    }
    else {
        $result[$key1] = $level1;
    }
}

这样的结果是

Array
(
    [level3] => value2
    [level3-A] => value2-A
    [level2-B] => value
    [level2-c] => value
)

我不知道应该阻止将level2-c 添加到结果中的逻辑。

【讨论】:

    猜你喜欢
    • 2019-06-25
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多