Я уже несколько секунд стучаю в эту голову.
У меня этот многомерный массив:
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 )
Есть идеи?
Все остальные решения, которые я нашел, решают многомерные массивы с разными ключами. В моих массивах используются только простые цифровые клавиши.
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"]