2016-04-22 6 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

いいえ、オブジェクトには日付ともう1つのプロパティが2つしかありません – user3068333

+0

このような状況が発生する可能性はありますか? '{date = '01 -01-2000 '、foo = 25}、{date = '01 -01-2000'、foo = 16}'です。ご覧のように、これらのエントリの日付は同じですが、セカンダリキーは同じですが、セカンダリキーの値は異なります。あなたのアルゴリズムはこのケースに対応すべきですか? – wilkesybear

答えて

1

dateプロパティを配列キーとして一時的に使用することで、これを行うことができます。あなたは$tmp配列のキーとして$val['date']を使用

$tmp = []; 

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

$result = array_values($tmp); 

:ここで私は考えることができ、最も簡単な例です。さて、foreachは配列を繰り返し処理するので、同じ日付の配列$tmpにあるものはすべて現在の値とマージします。

お望みなら、$tmpからarray_valuesを使用してキーを削除できます。

+0

助けをありがとう – user3068333

関連する問題