Если вы в порядке с потерей ключей массива, вы можете сгладить многомерный массив, используя рекурсивное закрытие в качестве обратного вызова, который использует array_values (), убедившись, что этот обратный вызов является параметром для array_walk (), следующим образом.
<?php
$array = [1,2,3,[5,6,7]];
$nu_array = null;
$callback = function ( $item ) use(&$callback, &$nu_array) {
if (!is_array($item)) {
$nu_array[] = $item;
}
else
if ( is_array( $item ) ) {
foreach( array_values($item) as $v) {
if ( !(is_array($v))) {
$nu_array[] = $v;
}
else
{
$callback( $v );
continue;
}
}
}
};
array_walk($array, $callback);
print_r($nu_array);
Единственный недостаток предыдущего примера заключается в том, что он включает в себя написание гораздо большего количества кода, чем в следующем решении, которое использует array_walk_recursive () вместе с упрощенным обратным вызовом:
<?php
$array = [1,2,3,[5,6,7]];
$nu_array = [];
array_walk_recursive($array, function ( $item ) use(&$nu_array )
{
$nu_array[] = $item;
}
);
print_r($nu_array);
См. живой код
Этот пример кажется предпочтительнее предыдущего, скрывая детали того, как значения извлекаются из многомерного массива. Конечно, итерация происходит, но влечет ли она за собой рекурсию или управляющую структуру (структуры), вы узнаете только из прочтения array.c . Поскольку функциональное программирование фокусируется на вводе и выводе, а не на мелочах получения результата, несомненно, можно не беспокоиться о том, как происходит закулисная итерация, то есть до тех пор, пока перспективный работодатель не задаст такой вопрос.