2016-04-22 71 views
1

例子:如何減少具有相同日期(屬性)的對象數組?

Array A

[0] { date="01-03-2016", foo=30} 
[1] { date="02-03-2016", foo=17} 
[2] { date="03-03-2016", foo=15} 
[3] { date="04-03-2016", foo=28} 
[4] { date="01-03-2016", bar=33} 
[5] { date="04-03-2016", bar=34} 

Array B (Wanted array)

[0] { date="01-03-2016", foo=30 ,bar=33} 
[1] { date="02-03-2016", foo=17} 
[2] { date="03-03-2016", foo=15} 
[3] { date="04-03-2016", foo=28, bar=34} 

我試着用array_unique($array, SORT_REGULAR);,但我猜陣列需要具有相同的屬性命名工作。

+0

是否還有其他鍵可能會在相同的日期相交?例如。 'foo'或'bar'鍵? – wilkesybear

+0

不,對象將只有2個屬性的日期和一個 – user3068333

+0

我的意思是要問是否會出現這種情況? '{date = '01 -01-2000',foo = 25},{date = '01 -01-2000',foo = 16}'。如您所見,這些條目具有相同的日期,相同的輔助鍵,但輔助鍵的值不同。你的算法是否適合這種情況? – wilkesybear

回答

1

您可以通過臨時使用date屬性作爲數組鍵來實現。這是我能想到的最簡單的例子:

$tmp = []; 

foreach ($array as $val) { 
    $tmp[$val['date']] = array_merge(
     isset($tmp[$val['date']]) ? $tmp[$val['date']] : [], 
     $val 
    ); 
} 

$result = array_values($tmp); 

您使用$val['date']$tmp陣列中的一個關鍵。現在,當foreach迭代你的數組時,它將合併$tmp數組中與當前值相同的數組。

然後,如果您願意,可以使用array_values$tmp中去除鑰匙。

+0

感謝您的幫助 – user3068333

相關問題