У меня есть такой массив:
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);
Интересно, что может пойти не так с 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
)
Других решений пока нет …