Сохранение данных столбца из многомерного массива с сохранением отсутствующих элементов

У меня есть массив ($myArray) который выглядит как

Array ( [0] =>
Array ( [0] =>
Array (
[Date] => 1776-08-08
[Color] => Yellow
[Description] => Rotten
) )

[1] => Array ( )
[2] =>
Array ([0] =>
Array (
[Date] => 2018-05-13
[Color] => Red
[Status] => Fresh
)
[1] =>
Array (
[Date] => 1991-03-29
[Color] => Green
[Status] => Fresh  ) )

Я перебираю содержимое значений Date, используя

array_walk_recursive($myArray, function($v, $k){
if ($k == "Date") echo $v . PHP_EOL;

Это даст мне правильный вывод.

1776-08-08 2018-05-13 1991-03-29

Я хочу добавить выходные данные в массив и даже если значение равно нулю (т.е. [1] выше), чтобы по-прежнему установить пустой массив.

Например, $ newArray =

Array ( [0] => 1776-08-08 )

Array ( )
Array ( [0] => 2018-05-13 [1] => 1991-03-29 )

2

Решение

Учитывая ваш пример, вариант заключается в использовании array_column() на каждом из элементов в самом внешнем массиве, что легко с array_map() функция.

$input = array(
array(
array(
"Date" => "1776-08-08",
"Color" => "Yellow",
"Description" => "Rotten",
),
),
array(
),
array(
array(
"Date" => "2018-05-13",
"Color" => "Red",
"Status" => "Fresh",
),
array(
"Date" => "1991-03-29",
"Color" => "Green",
"Status" => "Fresh",
),
),
);

$output = array_map(function($sub_arrays) {
return array_column($sub_arrays, "Date");
}, $input);

print_r($output);

Выше будет выводить что-то вроде:

Array
(
[0] => Array
(
[0] => 1776-08-08
)

[1] => Array
(
)

[2] => Array
(
[0] => 2018-05-13
[1] => 1991-03-29
)

)
2

Другие решения

Вам нужно будет сделать нормальный foreach цикл для верхнего уровня, а затем использовать array_walk_recursive для вложенных массивов.

$newArray = array();
foreach ($myArray as $el) {
$temp = array();
array_walk_recursive($el, function($v, $k) use (&$temp) {
if ($k == "Date") {
$temp[] = $v;
}
});
$newArray[] = $temp;
}

DEMO

0

По вопросам рекламы [email protected]