我正在尝试汇总上个月访问场所的用户的统计信息,因此我将其返回如下数组
[["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]
为Apr 6
有什么方法可以内置到PHP中吗?还是更简单的方法?
谢谢
编辑-我当前的代码:
$now = Carbon::now()->setTimezone($this->timezone);
$start = Carbon::now()->setTimezone($this->timezone);
$end = $now->subWeek()->subWeek();
$barStats = $this->barStats()->get();
$tempReturn = [];
$finalReturn = [];
foreach($barStats as $barStat) {
$timeArrived = Carbon::parse($barStat->timeArrived, $this->timezone);
if($timeArrived->between($start, $end)) {
$tempReturn[] = [substr($timeArrived->format('F'), 0, 3) . " $timeArrived->day", 1];
}
}
foreach($tempReturn as $return) {
if(!in_array($return[0], $finalReturn)) {
$finalReturn[] = [$return[0], array_count_values($tempReturn, 1)];
}
}
return $finalReturn;
看来您应该能够一口气做到这一点而无需$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');
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句