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]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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果第二个元素相同,则将列表中的第一个元素合并为元组?

使用fopen PHP获取第一个和第二个元素

Haskell,找到第二个元素最少的tupel,如果第二个元素具有两个相同值的tuple,则使用第一个元素进行排序

XPath-仅第二个级别元素的第一个元素

在第一个元素前面显示第二个 <span> 元素

从特定的第一个元素获取向量对的第二个元素

单击第一个元素,更改第二个元素的样式

有没有办法在列表中获得相同的第一个或第二个元素元组?

如果第一个和第二个元素相同,则查找列表列表的最大值

获取第二个系列中第一个系列的元素索引

如何仅选择第二个li元素的第一个孩子

从第二个列表中减去第一个列表中的元素

如何用第二个序列的元素填充第一个序列

获取数组的第一个和第二个元素

在Prolog中获取元组的第一个/第二个元素

迭代向量对并访问第一个和第二个元素

如何重新排序元素,使第一个元素在右侧,第二个元素在左侧?

获取鼠标下的第二个元素,它不是第一个元素的父元素

合并第二个元素相同的python子列表并返回总和和第二个元素

如何将第一个元素与其余元素进行比较,如何将第二个元素与其余元素进行比较,并进行相同的重复

访问第二个最小的第二个元素的排序嵌套列表的第一个元素

从数组1的第一个元素,数组2的第一个元素,数组1的第二个元素,数组2的第二个元素等创建python数组

如何使用 Java Streams 将第一个元素乘以第二个元素

Windbg 管理对象 poi 数组的第一个元素,第二个元素

将Class添加到第二个元素,从第一个元素开始计数

在Haskell中按第一个元素然后第二个元素对元组列表进行排序

元组列表列表,按第一个元素分组并添加第二个元素

当第二个元素是X时,C ++ Map获得第一个元素

如果第一个元素为空,则选择第二个元素的 XPath