Nepotrebno računanje dolžine polja v zanki v PHP
Naj imamo neko polje s števili:
<?php
$arr = [1, 2, 3, 4, 5];
?>
Naredimo tako, da se vsak element
polja kvadrira. To pomeni, da moramo
obdržati isto polje $arr, vendar s
kvadrati števil.
V tem primeru zanka foreach ni primerna,
potrebna je navadna zanka for po polju,
takole:
<?php
$arr = [1, 2, 3, 4, 5];
for ($i = 0; $i < count($arr); $i++) {
$arr[$i] = $arr[$i] * $arr[$i]; // spreminjamo vsak element polja
}
var_dump($arr);
?>
Kaj je narobe s to kodo? Težava je v tem,
da se bo count($arr) nesmiselno
računal pri vsaki iteraciji zanke! Zakaj,
saj se dolžina polja v zanki ne spreminja, ali ne?
Za optimizacijo izračunajmo dolžino polja v ločeno spremenljivko:
<?php
$arr = [1, 2, 3, 4, 5];
$len = count($arr); // optimiziramo
for ($i = 1; $i < $len; $i++) {
$arr[$i] = $arr[$i] * $arr[$i];
}
var_dump($arr);
?>
Optimizirajte spodnjo kodo:
<?php
$arr = [1, 2, 2, 4, 5];
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i - 1] === $arr[$i]) {
echo $arr[$i] . '<br>';
}
}
?>