2016-11-10 7 views
0

Ich habe ein Skript, das Daten von MongoDB in Form eines Arrays erhält und die Ergebnisse anzeigen. Das Array hat viele Datensätze. Die Probenanordnung ist wie folgt:PHP-Array foreach-Schleife Datenmanipulation

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) } 

I Platte wie in oben Array-MAC-Adresse in Bezug MAC-Adresse bin zeigen "2c: 33: 7a: 10: f8: 39" hat drei Datensätze und „38: 0b: 40: Anzeige: 03: 53" hat vier, so ich werde Dauer jeder Datensatz hinzufügen und zeigen auf Browser wie diese

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

ich tue dies durch Logik folgende, die ich denke, für 5000-6000 Aufzeichnungen ist zu langsam .

Ich bekomme zuerst die MAC-Adresse in einem Array und entfernen Sie die Duplizierung und dann eine FOR-Schleife auf diesem Array und fügen Sie alle Dauer für bestimmte Mac mein Code ist wie folgt.

<?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; 
    } 

?> 

Wie kann ich diesen Prozess schnell machen und diese Aufgabe in nur einer foreach-Schleife durchführen.

+0

Sie möchten [Code überprüfen] (http://codereview.stackexchange.com/) überprüfen, um zu sehen, wie Sie Ihren Code verbessern können. Zu Beginn können Sie vermeiden, das 'count()' von '$ arr' bei jeder Iteration zu berechnen, indem Sie diesen Wert speichern, bevor Sie mit dem Schleifen beginnen:' $ arrayCount = count ($ arr); ' – Henders

Antwort

Verwandte Themen