我有一个脚本,它以数组的形式从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循环中执行此任务。
答案 0 :(得分:0)
你应该让mongodb做总结。由于缺少您的mdb查询,请参阅https://docs.mongodb.com/v3.2/reference/operator/aggregation/sum/