2017-09-05 69 views
2

虽然使用存储列中的数据,同时保留缺失的元素

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

这对于日期的值的内容我有它看起来像

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 )) 

余环路的阵列($myArray)会得到我正确的输出。

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) 
+0

你需要这是在阵列上的深度(如何嵌套它们在彼此内),或者是如图所示的结构灵活;一个外部数组包含包含具有指定键的数组的数组? – salathe

+0

结构几乎相同。一些内部数组是开放的,有些可能有高达X的数量为“日期” – jumpman8947

回答

0

你需要做一个正常的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

应用此解决方案后,所有阵列等于1的条目。[0] => 1 [1] => 1等etc – jumpman8947

+0

对不起,不应该将'array_walk_recursive()'分配给数组。 – Barmar

+0

有另一个错误,它现在正在工作。 – Barmar

2

鉴于你例如,一种选择是最外面的阵列,这是很容易与array_map()功能在使用上每个项目的array_column()

$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 
     ) 

) 
相关问题