Ответ 1
РЕШЕНИЕ: Я использовал решение hakre, хотя я тоже искал решение для дезадаптации, и оно также работает. Я написал:
$flat = call_user_func_array('array_merge', $array);
Simple.
Я уже несколько секунд стучаю в эту голову.
У меня есть этот многомерный массив:
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
)
Любые идеи?
Все остальные решения, которые я нашел, решают многомерные массивы с разными ключами. Мои массивы используют только простые цифровые клавиши.
РЕШЕНИЕ: Я использовал решение hakre, хотя я тоже искал решение для дезадаптации, и оно также работает. Я написал:
$flat = call_user_func_array('array_merge', $array);
Simple.
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
& shy; 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);
?>
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()
как аргумент.
<?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"]