Optimierung überflüssiger Schleifendurchläufe in PHP
Im folgenden Code prüft ein Programmierer,
ob das Array die Zahl 3 enthält:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$exists = false;
foreach ($arr as $elem) {
if ($elem == 3) {
$exists = true;
}
}
var_dump($exists);
?>
Was ist an seiner Lösung falsch? Auf den ersten Blick scheint
die Schleife keine überflüssigen Operationen auszuführen. Das Problem
liegt jedoch darin, dass die Schleife weiterläuft, nachdem festgestellt wurde,
dass die Zahl 3 im Array enthalten ist.
Am ineffizientesten ist es, wenn die Zahl 3
irgendwo am Anfang des Arrays gefunden wird, das Array selbst
aber eine Länge von, sagen wir, 1000 Elementen hat.
Das ergibt tausend nutzlose, überflüssige Schleifeniterationen!
Nicht optimal.
Optimieren wir den Code, indem wir die Schleife rechtzeitig anhalten:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$exists = false;
foreach ($arr as $elem) {
if ($elem == 3) {
$exists = true;
break;
}
}
var_dump($exists);
?>
Der folgende Code zählt, wie viele
Elemente des Arrays addiert werden müssen,
damit die Summe größer als 10 wird.
Führen Sie eine Optimierung durch:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$sum = 0;
$i = 1;
foreach ($arr as $elem) {
$sum += $elem;
if ($sum <= 10) {
$i++;
}
}
echo $i;
?>
Der folgende Code gibt gerade Zahlen aus einem bestimmten Bereich aus. Führen Sie eine Optimierung durch:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0) {
echo $i;
}
}
?>
Der folgende Code gibt Zahlen aus,
die gleichzeitig durch 2
und durch 3 teilbar sind. Führen Sie eine Optimierung durch:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0 and $i % 3 === 0) {
echo $i;
}
}
?>