PHP数组foreach循环数据操作


php array foreach loop data manipulation

我有一个脚本,以数组的形式从MongoDB获取数据并显示结果。数组中有许多记录。示例数组如下:

array(2) {   ["mac"]=> string(17) "2c:33:7a:10:f8:39" int(1478199995) ["duration"]=> int(5) }
array(2) {   ["mac"]=> string(17) "38:0b:40:ad:03:53" int(1478203338) ["duration"]=> int(3) }
array(2) {   ["mac"]=> string(17) "38:0b:40:ad:03:53" int(1478201111) ["duration"]=> int(7) }
array(2) {   ["mac"]=> string(17) "2c:33:7a:10:f8:39" int(1478206709) ["duration"]=> int(7) }
array(2) {   ["mac"]=> string(17) "38:0b:40:ad:03:53" int(1478202821) ["duration"]=> int(6) }
array(2) {   ["mac"]=> string(17) "2c:33:7a:10:f8:39" int(1478202366) ["duration"]=> int(4) }
array(2) {   ["mac"]=> string(17) "38:0b:40:ad:03:53" int(1478205023) ["duration"]=> int(2) } 

我正在显示关于mac地址的记录,就像上面的数组mac地址"2c:33:7a:10:f8:39"有三条记录,"38:0b:40:ad:03:53"有四条,所以我将添加每条记录的持续时间,并在浏览器上显示,像这样

2c:33:7a:10:f8:39          16sec
38:0b:40:ad:03:53          18sec

我这样做是通过以下逻辑,我认为是太慢的5000到6000条记录。

我首先在数组中获得mac地址并删除重复,然后在该数组上运行for循环并添加特定mac的所有持续时间,我的代码如下:

<?php
 foreach ($cursor as $document) {
 array_push($arr,$document["mac"]);
 }
 $arr=array_unique($arr);
 $duration=0;
for($i=0;$i<count($arr);$i++){
 foreach ($cursor as $document) {
if($document["mac"]==$arr[$i])
 {
 $duration+=$document['assoc_time'];
 }
 echo $arr[$i]."      ".$duration;
  }
?>

如何使这个过程快速,以及如何在一个foreach循环中执行此任务。

您应该让mongodb进行求和。由于缺少mdb查询,请参见https://docs.mongodb.com/v3.2/reference/operator/aggregation/sum/