2016-11-10 185 views
0

我有一個腳本,它以數組的形式從MongoDB獲取數據並顯示結果。該數組有很多記錄。該取樣陣列是如下:php數組foreach循環數據操作

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:廣告: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

您可能希望查看[代碼評論](http://codereview.stackexchange.com/)以瞭解如何使代碼更好。作爲開始,您可以通過在開始循環前存儲該值來避免在每次迭代中計算'$ arr'的'count()':'$ arrayCount = count($ arr);' – Henders

回答