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

时间:2016-04-22 21:15:20

标签: php sorting multidimensional-array

示例:

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

1 个答案:

答案 0 :(得分: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数组中的任何内容与当前值合并。

然后,如果您愿意,可以使用$tmparray_values剥离密钥。