如何减少具有相同日期(属性)的对象数组


How to reduce an array of objects with same dates (property)?

示例:

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);但我想数组需要具有相同的属性名称才能工作。

可以通过临时使用 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中剥离密钥。