foreach 循环中值的增量计数 PHP

Increment count for value in foreach loop PHP

我正在尝试从一个数组中计算 rfid 的实例以插入到另一个数组中,以便我可以使用此数据来创建图表。

目前我的代码如下

if ($message == "Broken" && $message_type == "BreakBeam" && $previous==$cat_id) {
            
            $total = 1;
            
            $splitTimeStamp = explode(" ",$eventtime);
            $date = $splitTimeStamp[0];
            $time = $splitTimeStamp[1];
        
            $events[$c]['date'] = $date;
            $events[$c]['device'] = $device;
            $events[$c]['time']= $time;
            $events[$c]['rfid']= $previous;
            $events[$c]['count']=$total;
            $c++;
        }   
        }  


        $a = array();
        $i=0;

        foreach($events as $event){
          if(isset($a[$event['rfid']])){
            $a['rfid_id'][$event['rfid']]++;
          }else{
            $a['rfid_id'][$event['rfid']]=1;
          }
          if(isset($a[$event['date']])){
            $a['dateinsert'][$event['date']]++;
          }else{
            $a['dateinsert'][$event['date']] =1;        
           }
        }



    $rfid = array();
    // those are the ones we're going to put in!

    foreach($a as $key => $count) {
      foreach($count as $eventdetails['rfid_id'] => $event){
      // so $key is the [rfid] key of the entry and $count is the count (all 1's?) in it
    if (isset($rfid[$key])) {
      $rfid[$key]+=$event;
    }
    else {
      $rfid[$key]=$event;
    }
    }
  }

输出如下:

Array
(
    [0] => Array
        (
            [date] => 2020-09-17
            [device] => 2
            [time] => 15:51:37
            [rfid] => 23641
            [count] => 1
        )

    [1] => Array
        (
            [date] => 2020-09-17
            [device] => 2
            [time] => 15:52:20
            [rfid] => 5609
            [count] => 1
        )

    [2] => Array
        (
            [date] => 2020-09-17
            [device] => 2
            [time] => 15:53:23
            [rfid] => 5609
            [count] => 1
        )

    [3] => Array
        (
            [date] => 2020-09-17
            [device] => 2
            [time] => 16:02:44
            [rfid] => 5609
            [count] => 1
        )

)
Array
(
    [rfid_id] => Array
        (
            [23641] => 1
            [5609] => 1
        )

    [dateinsert] => Array
        (
            [2020-09-17] => 1
        )

)
Array
(
    [rfid_id] => 2
    [dateinsert] => 1
)

理想情况下,我想实现以下目标:

Array
(
    [rfid_id] => Array
        (
            [23641] => 1
            [5609] => 3
        )

    [dateinsert] => Array
        (
            [2020-09-17] => 1
        )

)

或类似的东西,我可以在其中查看日期、rfid 代码以及在该日期读取每个代码的时间。

您只是缺少赋值循环中的路径。

rfiddate 也一样,所以我只在 rfid 上解释一下。 您在一条路径上检查 isset 但在另一条路径上不存在设置 - 这导致路径永远不存在 - 这就是为什么你一直得到 1 的原因。

查看:

foreach($events as $event){
  if(isset($a[$event['rfid']])){
    $a['rfid_id'][$event['rfid']]++;
  } else {
    $a['rfid_id'][$event['rfid']]=1;
  }
}

注意 $a[$event['rfid']]$a['rfid_id'][$event['rfid']] 不同。

您应该将 if 语句更改为:if (isset($a['rfid_id'][$event['rfid']))