Поворот многомерного массива в одномерный массив

Я уже несколько секунд стучаю в эту голову.

У меня этот многомерный массив:

Array ( [0] => Array ( [0] => foo [1] => bar [2] => hello ) [1] => Array ( [0] => world [1] => love ) [2] => Array ( [0] => stack [1] => overflow [2] => yep [3] => man ) 

И мне нужно это сделать:

 Array ( [0] => foo [1] => bar [2] => hello [3] => world [4] => love [5] => stack [6] => overflow [7] => yep [8] => man ) 

Есть идеи?

Все остальные решения, которые я нашел, решают многомерные массивы с разными ключами. В моих массивах используются только простые цифровые клавиши.

Solutions Collecting From Web of "Поворот многомерного массива в одномерный массив"

 array_reduce($array, 'array_merge', array()) 

Пример:

 $a = array(array(1, 2, 3), array(4, 5, 6)); $result = array_reduce($a, 'array_merge', array()); 

Результат:

 array[1, 2, 3, 4, 5, 6]; 

Функция PHP array_merge Docs может сгладить ваш массив:

 $flat = call_user_func_array('array_merge', $array); 

Если исходный массив имеет более высокую глубину, чем 2 уровня, SPL в PHP имеет RecursiveArrayIterator вы можете использовать для его сглаживания:

 $flat = iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($array)), 0); 

См. Также: Как сгладить многомерный массив? ,

Это действительно все, что нужно:

 foreach($array as $subArray){ foreach($subArray as $val){ $newArray[] = $val; } } 

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

пример:

 <?php // Array representing a possible record set returned from a database $records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe', ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith', ), array( 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones', ), array( 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe', ) ); $first_names = array_column($records, 'first_name'); print_r($first_names); ?> 

РЕШЕНИЕ: Я использовал решение hakre, хотя я также испробовал решение deceze, и он также работает. Я написал:

 $flat = call_user_func_array('array_merge', $array); 

Просто.

 foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2\n"; } } 

где $ a – имя вашего массива. для подробностей

Начиная с PHP 5.3 кратчайшее решение выглядит как array_walk_recursive () с новым синтаксисом закрытия:

 function flatten(array $array) { $return = array(); array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; }); return $return; } 

В PHP5.6 есть другой способ решить эту проблему, объединив функции, array_shift() чтобы удалить первый элемент исходного массива array_pus() чтобы добавить элементы в новый массив, важно, что ... splapt / elipse он array_shitf() return array_shitf() как аргумент.

 <?php $arr = [ ['foo', 'bar', 'hello'], ['world', 'love'], ['stack', 'overflow', 'yep', 'man', 'wow'] ]; $new = []; while($item = array_shift($arr)){ array_push($new, ...$item); } print_r($new); 

Вывод:

 Array ( [0] => foo [1] => bar [2] => hello [3] => world [4] => love [5] => stack [6] => overflow [7] => yep [8] => man [9] => wow ) 

Пример – идеон

Я использовал этот код для решения такого же типа проблем. поэтому вы также можете попробовать это.

 function array_flatten($array) { if (!is_array($array)) { return FALSE; } $result = array(); foreach ($array as $key => $value) { if (is_array($value)) { $result = array_merge($result, array_flatten($value)); } else { $result[$key] = $value; } } return $result; } 
 $blocked_dates = array( '2014' => Array ( '8' => Array ( '3' => '1', '4' => '1', '6' => '1', '10' => '1', '15' => '1', '25' => '1' ) ), '2015' => Array ( '9' => Array ( '3' => '1', '4' => '1', '6' => '1', '10' => '1', '15' => '1', '25' => '1' ) ) ); 

RESUTL (ОДИН РАЗМЕРНЫЙ МАССА):

 $unavailable_dates = array(); foreach ($blocked_dates as $year=>$months) { foreach ($months as $month => $days) { foreach ($days as $day => $value) { array_push($unavailable_dates,"$year-$month-$day"); } } } $unavailable_dates = json_encode($unavailable_dates); print_r($unavailable_dates); OUTPUT : ["2014-8-3","2014-8-4","2014-8-6","2014-8-10","2014-8-15","2014-8-25","2015-9-3","2015-9-4","2015-9-6","2015-9-10","2015-9-15","2015-9-25"]