Onnodige berekening van arraylengte in 'n lus in PHP
Laat daar 'n sekere array met getalle gegee word:
<?php
$arr = [1, 2, 3, 4, 5];
?>
Kom ons maak dat elke element van die array
kwadreer word. Dit beteken ons moet dieselfde array
$arr hou, maar met kwadrate van die getalle.
In so 'n geval pas die foreach lus nie,
en 'n gewone for lus oor die array word benodig,
soos hier:
<?php
$arr = [1, 2, 3, 4, 5];
for ($i = 0; $i < count($arr); $i++) {
$arr[$i] = $arr[$i] * $arr[$i]; // verander elke element van die array
}
var_dump($arr);
?>
Wat is fout met hierdie kode? Die probleem is dat
count($arr) sinloos elke lus-iterasie bereken
sal word! Maar hoekom, aangesien die lengte van die
array nie in die lus verander nie, of hoe?
Vir optimalisering, laat ons die berekening van die arraylengte in 'n aparte veranderlike plaas:
<?php
$arr = [1, 2, 3, 4, 5];
$len = count($arr); // optimaliseer
for ($i = 1; $i < $len; $i++) {
$arr[$i] = $arr[$i] * $arr[$i];
}
var_dump($arr);
?>
Optimaliseer die kode hieronder:
<?php
$arr = [1, 2, 2, 4, 5];
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i - 1] === $arr[$i]) {
echo $arr[$i] . '<br>';
}
}
?>