2012-02-17 122 views
2

例如,我有$ dates1和$ dates2如下所示,並且想要創建$ dates3,它將所有日期保留在$ dates1中,並添加任何唯一日期在$ dates2,忽略任何重複。數組包含其他值,但我只是顯示日期,因爲這是我想合併/排序。如何合併兩個日期數組忽略重複日期,然後按日期排序

$ dates1 =

Array 
(
[0] => Array 
    (
     [day] => 2012-01-01 
     [foo] => "bar" 
    ) 

[1] => Array 
    (
     [day] => 2012-01-02 
     [foo] => "bar" 
    ) 

[2] => Array 
    (
     [day] => 2012-01-03 
     [foo] => "bar" 
    ) 
) 

$ dates2 =

Array 
(
[0] => Array 
    (
     [day] => 2011-12-31 
    ) 

[1] => Array 
    (
     [day] => 2012-01-01 
    ) 

[2] => Array 
    (
     [day] => 2012-01-02 
    ) 
[3] => Array 
    (
     [day] => 2012-01-03 
    ) 
[4] => Array 
    (
     [day] => 2012-01-04 
    ) 
) 

所以我想合併$ dates2到$ dates1,忽略任何重複,使$ dates3:

Array 
(
[0] => Array 
    (
     [day] => 2011-12-31 
    ) 

[1] => Array 
    (
     [day] => 2012-01-01 
     [foo] => "bar" 
    ) 

[2] => Array 
    (
     [day] => 2012-01-02 
     [foo] => "bar" 
    ) 
[3] => Array 
    (
     [day] => 2012-01-03 
     [foo] => "bar" 
    ) 
[4] => Array 
    (
     [day] => 2012-01-04 
    ) 
) 
+1

提示...'array_multisort()'和'array_unique()'是你的朋友。 – Kenaniah 2012-02-17 20:22:34

回答

0

我不確定我是否正確理解你,你的意思是這樣嗎?

$old_array = array_merge($dates1, $dates2); 
    $new_array = array(); 
    foreach ($old_array as $item){ 
     if (!array_key_exists($item['day'], $new_array)){ 
      $new_array[$item['day']] = $item; 
     } 
    } 
    return $new_array; 
+0

嗯只是嘗試後,試圖普拉特的答案,我有同樣的問題(最後一個元素似乎在foreach後失蹤)..必須是問題是在我的最後..讓我試試更多的東西.. – 2012-02-18 01:38:45

0

像這樣的東西應該工作

$a1 = array(array('day' => '2012-01-01', 'foo' => 'bar1'), 
      array('day' => '2012-01-02', 'foo' => 'bar2'), 
      array('day' => '2012-01-03', 'foo' => 'bar3')); 

$a2 = array(array('day' => '2011-12-31'), 
      array('day' => '2012-01-01'), 
      array('day' => '2012-01-02'), 
      array('day' => '2012-01-03'), 
      array('day' => '2012-01-04')); 

$orderedArray = array(); 
foreach (array_merge($a1, $a2) as $v) 
{ 
    if (count($v) == 1 && isset($orderedArray[$v['day']])) 
     continue; 

    $orderedArray[$v['day']] = $v; 
} 
ksort($orderedArray); 

print_r($orderedArray); 

編輯:我重構代碼。

+0

這幾乎爲我工作,除非它似乎是刪除array_merge($ a1,$ a2)中的最後一個元素。 – 2012-02-18 01:31:11

+0

我的意思是在完成foreach後,如果我print_r($ orderedArray),最後一個元素(在你的例子中 - > array('day'=>'2012-01-04')),缺少,但我注意到這也發生在其他答案(zerg ling)中,所以可能是問題在我的末端。將嘗試更多的東西.. – 2012-02-18 01:40:03

+0

你能告訴我你的array_merge($ a1,$ a2)的輸出嗎? – mpratt 2012-02-18 03:41:15