2017-09-05 67 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 
     ) 

) 
相關問題