通过递归将多维数组转换为简单数组


Convert multidimensional array to a simple array by recursion

如何转换此数组:

$array = [
    "order" => [
        "items" => [
            "6" => [
                "ndc" => "This value should not be blank."
            ],
            "7" => [
                "ndc" => "This value should not be blank."
            ]
        ]
    ]
];

$array = [
    "order[items][6][ndc]" => "This value should not be blank.",
    "order[items][7][ndc]" => "This value should not be blank.",
];

第一个数组可以有无限数量的嵌套级别。因此嵌套foreach不是一个选项。

我花了很多时间寻找解决方案,但一无所获。有人能帮助或引导我吗?

这样的东西应该可以完成任务:

$newArr = [];
function reduce_multi_arr($array, &$newArr, $keys = '') {
  if (!is_array($array)) {
      $newArr[$keys] = $array;
  } else {
      foreach ($array as $key => $val) {
        if ($keys === '') $nextKey = $key; // first key
        else $nextKey = '[' . $key . ']'; // next [keys]
        reduce_multi_arr($val, $newArr, $keys . $nextKey);
      }
  }
}
reduce_multi_arr($array, $newArr);
print_r($newArr);

输出:

Array
(
    [order[items][6][ndc]] => 'This value should not be blank.'
    [order[items][7][ndc]] => 'This value should not be blank.'
)