PHP合并元素与相同的第一个元素添加第二

时间:2018-05-04 22:35:17

标签: php

我正在尝试汇总用户上个月访问场地的统计数据,我有它所以它返回一个数组如下

[["Apr 6",1],["Apr 6",1],["Apr 6",1],["Apr 6",1],["Apr 6",1],["Apr 6",1],["Apr 6",1],["Apr 6",1],["Apr 6",1],["Apr 6",1],["Apr 6",1],["Apr 6",1],["Apr 7",1],["Apr 7",1],["Apr 7",1],["Apr 13",1],["Apr 14",1],["Apr 15",1],["Apr 15",1],["Apr 15",1],["Apr 16",1],["Apr 16",1],["Apr 16",1],["Apr 16",1],["Apr 16",1],["Apr 16",1],["Apr 16",1],["Apr 17",1],["Apr 17",1],["Apr 17",1],["Apr 17",1],["Apr 20",1],["Apr 20",1],["Apr 20",1],["Apr 20",1],["Apr 21",1],["Apr 27",1],["Apr 27",1],["Apr 27",1],["Apr 27",1],["Apr 27",1],["Apr 28",1],["Apr 28",1],["Apr 29",1],["Apr 29",1],["Apr 30",1],["Apr 30",1],["May 4",1],["May 4",1],["May 4",1]]

我想将所有日期合并在一起,增加第一个元素中的数字,因此对于此特定数组,它会显示[["Apr 6", 12]的{​​{1}}

有没有办法在PHP中内置这个或更简单的方法呢?

由于

  • 扎克

编辑 - 我当前的代码:

Apr 6

1 个答案:

答案 0 :(得分:2)

看起来你应该能够在没有$tempReturn的情况下一次性完成。您可以将日期作为最终结果中的关键字,并随时增加:

foreach($barStats as $barStat) {
    $timeArrived = Carbon::parse($barStat->timeArrived, $this->timezone);
    if ($timeArrived->between($start, $end)) {

        // get the day
        $day = substr($timeArrived->format('F'), 0, 3) . " $timeArrived->day";

        // use it as the key in $finalReturn
        if (!isset($finalReturn[$day])) {
            $finalReturn[$day] = [$day, 0];
        }
        $finalReturn[$day][1]++;
    }
}

// remove the string keys if necessary
$finalReturn = array_values($finalReturn);

顺便说一下,我并不是真的了解Carbon,所以可能还有其他原因让你这样做,但看起来日期格式可以简化为

$day = $timeArrived->format('M j');