Cálculo innecesario de la longitud de un array en un bucle en PHP
Supongamos que tenemos un array con números:
<?php
$arr = [1, 2, 3, 4, 5];
?>
Hagamos que cada elemento del array
se eleve al cuadrado. Es decir, debemos
obtener el mismo array $arr, pero con
los números al cuadrado.
En este caso, el bucle foreach no es adecuado,
se necesita un bucle for normal para recorrer el array,
así:
<?php
$arr = [1, 2, 3, 4, 5];
for ($i = 0; $i < count($arr); $i++) {
$arr[$i] = $arr[$i] * $arr[$i]; // cambiamos cada elemento del array
}
var_dump($arr);
?>
¿Qué está mal con este código? El problema es que
count($arr) se calculará innecesariamente en
cada iteración del bucle! ¿Por qué?, si la longitud del array no cambia durante el bucle, ¿verdad?
Para optimizar, saquemos el cálculo de la longitud del array a una variable separada:
<?php
$arr = [1, 2, 3, 4, 5];
$len = count($arr); // optimizamos
for ($i = 1; $i < $len; $i++) {
$arr[$i] = $arr[$i] * $arr[$i];
}
var_dump($arr);
?>
Optimice el siguiente código:
<?php
$arr = [1, 2, 2, 4, 5];
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i - 1] === $arr[$i]) {
echo $arr[$i] . '<br>';
}
}
?>