PHP – Как получить все значения массива из n глубокого массивного массива?

Я пытаюсь получить все значения массива многомерного массива, но вещь – массив может быть 1 уровень глубокой или 2, 3 или 4, т. е. n уровней.

вот некоторые случайные, например, содержимое массива.

EG1

Array ( [0] => Array ( [0] => name0 ) [1] => Array ( [0] => name1 ) [2] => Array ( [0] => name2 ) [3] => Array ( [0] => name3 ) [4] => Array ( [0] => name4 ) [5] => Array ( [0] => name4 ) [6] => Array ( [0] => name5 ) ) 

ЭГ2

 Array ( [0] => Array ( [0] => name0 [1] => name1 [2] => name2 [3] => name3 [4] => name4 [5] => name5 ) ) 

Я хочу, чтобы все значения находились в новом массиве. До сих пор я пробовал что-то вроде этого.

цикл за n раз, используя foreach loop, теперь он отлично работает, но я хотел бы знать, правильно ли он программно исправлен или есть какой-либо другой способ, который быстрее или лучше этого.

PHP-код.

 <?php $out_final_array = array (); function foreach_values_endless($array){ global $out_final_array; /* if its array */ if(is_array($array)){ /*run foreach loop to find more sub arrays */ foreach ($array as $value){ /* if value is an array send to own custom function */ if(is_array($value)){ $out_final_array[] = foreach_values_endless(array_values($value)); }else{ /* value is not an array*/ $out_final_array[] = $value; } } }else{ /* value is not array */ $out_final_array[] = $array; } } 

Solutions Collecting From Web of "PHP – Как получить все значения массива из n глубокого массивного массива?"

Если вам нужно сгладить его, другим способом будет использование SPL RecursiveArrayIterator и RecursiveIteratorIterator :

 $new_data = array(); $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($data)); foreach($it as $v) { $new_data[] = $v; } 

Образец вывода

Sidenote: нет необходимости в этом global просто return значения:

 function foreach_values_endless($array){ $data = array(); foreach ($array as $k => $v) { if (is_array($v)) { $data = array_merge($data, foreach_values_endless($v)); } else { $data[] = $v; } } return $data; } 

Образец вывода

Вы можете использовать array_walk_recursuve() :

 $final = array(); array_walk_recursive($input, function($item, $key) use (&$final){ $final[0][] = $item; }); 

Это должно сработать для вас:

Просто выполните все ваши значения с помощью array_walk_recursive() , например:

 $result = []; array_walk_recursive($arr, function($v, $k)use(&$result){ $result[] = $v; }); print_r($result);