Выровнять массив при сохранении пар ключ-значение в переполнении стека

У меня есть такой массив:

array (size=4)
0 =>
array (size=4)
key => value
key => value
key => value
key => value
1 =>
array (size=2)
key => value
key => value
2 =>
array (size=1)
key => value
3 =>
array (size=1)
key => value

Я хочу сгладить массив, чтобы быть таким:

array (size=4)
key => value
key => value
key => value
key => value
key => value
key => value
key => value
key => value

Я попробовал свои собственные решения, используя такие вещи, как array_merge, array_walk_recursive, а также RecursiveIteratorIterator с RecursiveArrayIterator, Я также попробовал многие решения, опубликованные по схожим вопросам в StackOverflow, но ни одно из них не сработало так, как я ожидал. Они либо не сохраняют пары ключ-значение, либо дают массив, идентичный оригиналу. Мои попытки выглядят примерно так:

$multidimensionalArray = array(stuff goes here);
$flatArray = array();

function flattenArray ($array) {
foreach ($array as $key => $value) {
if (is_array($value) {
flattenArray($value);
}
else {
$flatArray[$key] = $value;
}
}
}

flattenArray($multidimensionalArray);

1

Решение

Интересно, что может пойти не так с RecursiveArrayIteratorпотому что вам нужно было только собрать пары ключ / значение из итератора, используя самый простой foreach цикл:

$a = [
0 => ['a' => 1, 'b' => 2],
1 => ['x' => 3, 'y' => 4],
2 => 5,
3 => ['m' => 6, ['k' => 7, 'n' => 8]],
];

$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($a));

foreach ($it as $key => $value) {
$result[$key] = $value;
}

print_r($result);

Выход:

Array
(
[a] => 1
[b] => 2
[x] => 3
[y] => 4
[2] => 5
[m] => 6
[k] => 7
[n] => 8
)
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]