Optimalisatie van overbodige loopiteraties in PHP
In de volgende code controleert een programmeur
of het getal 3 in de array aanwezig is:
<?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);
?>
Wat is er mis met zijn oplossing? Het lijkt erop dat er
geen overbodige operaties in de loop worden uitgevoerd. Het probleem
is echter dat nadat vastgesteld is
dat het getal 3 in de array zit - de loop
toch blijft doordraaien tot het einde van de array.
Het minst efficiënt zou zijn als het getal 3
ergens aan het begin van de array wordt gevonden, terwijl de array zelf
bijvoorbeeld 1000 elementen lang is.
Dat resulteert in duizend nutteloze, overbodige iteraties
van de loop! Niet optimaal.
Laten we de code optimaliseren door de loop op tijd te stoppen:
<?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);
?>
De volgende code berekent hoeveel
elementen van de array opgeteld moeten worden,
voordat de som groter wordt dan 10.
Voer de optimalisatie uit:
<?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;
?>
De volgende code geeft even getallen weer uit een opgegeven bereik. Voer de optimalisatie uit:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0) {
echo $i;
}
}
?>
De volgende code geeft getallen weer
die tegelijkertijd deelbaar zijn door 2
en door 3. Voer de optimalisatie uit:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0 and $i % 3 === 0) {
echo $i;
}
}
?>