Onnodige berekening van arraylengte in loop in PHP
Stel we hebben een array met nummers:
<?php
$arr = [1, 2, 3, 4, 5];
?>
Laten we elk element van de array
kwadrateren. Dat wil zeggen, we houden
dezelfde array $arr, maar met
kwadraten van de nummers.
In dit geval is een foreach loop
niet geschikt, maar hebben we een gewone
for loop nodig, zoals hier:
<?php
$arr = [1, 2, 3, 4, 5];
for ($i = 0; $i < count($arr); $i++) {
$arr[$i] = $arr[$i] * $arr[$i]; // verander elk element van de array
}
var_dump($arr);
?>
Wat is er mis met deze code? Het probleem is
dat count($arr) onnodig wordt
berekend bij elke iteratie van de loop! Waarom?
De lengte van de array verandert niet in de loop, toch?
Voor optimalisatie halen we de berekening van de arraylengte naar een aparte variabele:
<?php
$arr = [1, 2, 3, 4, 5];
$len = count($arr); // optimaliseren
for ($i = 1; $i < $len; $i++) {
$arr[$i] = $arr[$i] * $arr[$i];
}
var_dump($arr);
?>
Optimaliseer de onderstaande code:
<?php
$arr = [1, 2, 2, 4, 5];
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i - 1] === $arr[$i]) {
echo $arr[$i] . '<br>';
}
}
?>