Calcolo non necessario della lunghezza dell'array in un ciclo in PHP
Supponiamo di avere un array di numeri:
<?php
$arr = [1, 2, 3, 4, 5];
?>
Facciamo in modo che ogni elemento dell'array
venga elevato al quadrato. Cioè, dovremmo
avere lo stesso array $arr, ma con
i numeri al quadrato.
In questo caso, il ciclo foreach non è adatto,
ma serve un normale ciclo for per l'array,
in questo modo:
<?php
$arr = [1, 2, 3, 4, 5];
for ($i = 0; $i < count($arr); $i++) {
$arr[$i] = $arr[$i] * $arr[$i]; // modifica ogni elemento dell'array
}
var_dump($arr);
?>
Cosa non va in questo codice? Il problema è
che count($arr) verrà calcolato inutilmente
ad ogni iterazione del ciclo! Perché, dopotutto,
la lunghezza dell'array non cambia durante il ciclo, giusto?
Per ottimizzare, spostiamo il calcolo della lunghezza dell'array in una variabile separata:
<?php
$arr = [1, 2, 3, 4, 5];
$len = count($arr); // ottimizziamo
for ($i = 1; $i < $len; $i++) {
$arr[$i] = $arr[$i] * $arr[$i];
}
var_dump($arr);
?>
Ottimizza il codice seguente:
<?php
$arr = [1, 2, 2, 4, 5];
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i - 1] === $arr[$i]) {
echo $arr[$i] . '<br>';
}
}
?>