Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Code-Optimierung: Beispiele für PHP-Foreach- und Geschwindigkeitsvergleichstests

PHP-Code-Optimierung: Beispiele für PHP-Foreach- und Geschwindigkeitsvergleichstests

PHPz
PHPzOriginal
2017-04-04 11:39:132822Durchsuche

Experimente sind für mich eine wichtige Möglichkeit, Informatik zu lernen. Informatik ist kein einfaches intellektuelles Spiel, sondern ein Werkzeug, um die Welt zu verändern. Mathematische Methoden und experimentelle Methoden sind die grundlegenden Methoden der Computerforschung und die grundlegenden Methoden unseres Lernens. Mathematik trainiert unsere Denkfähigkeit, und Experimente trainieren unsere operativen Fähigkeiten und die Fähigkeit, praktische Probleme zu lösen. Unsere tägliche Arbeit sollte als Experiment betrachtet werden und wir sollten zusammenfassen, was uns aus unserer täglichen Arbeit nützlich ist. Um beispielsweise PHP-Code gut zu schreiben, ist die Effizienz ein sehr wichtiger Faktor. Unabhängig davon, ob die Effizienz hoch ist oder nicht, müssen wir Experimente durchführen. Das Folgende ist meine Bewertung mehrerer Array-Loop-Verarbeitungsmethoden in PHP. Der Testcode ist sehr einfach: Beispiel PHP foreach und zum Geschwindigkeitsvergleich (Was ist PHP foreach?)

<?php
/**
 * array_walk 和 foreach, for 的效率的比较。
 * 我们要测试的是foreach, for, 和 array_walk的效率的问题。 
 */

//产生一个10000的一个数组。
$max = 10000;
$test_arr = range(0, $max);
$temp;
//我们分别用三种方法测试求这些数加上1的值的时间。

// for 的方法
$t1 = microtime(true);
for ($i = 0; $i < $max; $i++) {
    $temp = $temp + 1;
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "就使用for, 没有对数组操作 花费: {$t}\n";

$t1 = microtime(true);
for ($i = 0; $i < $max; $i++) {
    $test_arr[$i] = $test_arr[$i] + 1;
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用for 并且直接对数组进行了操作 花费: {$t}\n";

$t1 = microtime(true);
for ($i = 0; $i < $max; $i++) {
    addOne($test_arr[$i]);
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用for 调用函数对数组操作 花费 : {$t}\n";

$t1 = microtime(true);
foreach ($test_arr as $k => &$v) {
    $temp = $temp + 1;
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用 foreach 没有对数组操作 花费 : {$t}\n";

$t1 = microtime(true);
foreach ($test_arr as $k => &$v) {
    $v = $v + 1;
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用 foreach 直接对数组操作 : {$t}\n";

$t1 = microtime(true);
foreach ($test_arr as $k => &$v) {
    addOne($v);
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用 foreach 调用函数对数组操作 : {$t}\n";

$t1 = microtime(true);
array_walk($test_arr, &#39;addOne&#39;);
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用 array_walk 花费 : {$t}\n";

function addOne(&$item) {
    $item = $item + 1;
}
?>


Ergebnis der Ausführung:
Nur ​​for verwenden, keine Kosten für Array-Operationen: 0,15388584136963
Verwenden Sie foreach ohne Kosten für Array-Operationen : 0,076934814453125

Verwenden Sie das Array und betreiben Sie es direkt. Kosten: 0,14769005775452
Verwenden Sie foreach, um das Array direkt zu betreiben: 0,076115131378174


Verwenden Die Kosten für den Aufruf einer Funktion für Array-Operationen: 0,32393312454224
Verwendung von foreach zum Aufruf einer Funktion für Array-Operationen: 0,25716996192932
Die Kosten für die Verwendung von array_walk: 0,17966890335083


Ein 0 Während Bei der Operation von Zahlen können wir aus diesem Experiment folgende Schlussfolgerung ziehen:

foreach ist viel effizienter als for. Vielleicht liegt ein wichtiger Grund darin, dass für viele bedingte Urteile durchgeführt werden müssen. Verwenden Sie foreach also in Zukunft überall dort, wo Sie es verwenden können, was die Effizienz verdoppeln kann.

Wenn Sie eine Funktion innerhalb einer Schleife aufrufen möchten, verwenden Sie am besten array_walk. Es ist doppelt so effizient wie for und 43 % effizienter als foreach.

Ein weiterer Tipp: Wenn Ihr Programm sehr hohe Effizienzanforderungen hat, rufen Sie Funktionen am besten nicht in tiefen Schleifen auf.

Das obige ist der detaillierte Inhalt vonPHP-Code-Optimierung: Beispiele für PHP-Foreach- und Geschwindigkeitsvergleichstests. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn