Optimización de pasos innecesarios en bucles en PHP
En el siguiente código, un programador verifica
si el número 3 está en el array:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$exists = false;
foreach ($arr as $elem) {
if ($elem == 3) {
$exists = true;
}
}
var_dump($exists);
?>
¿Qué está mal con su solución? Parece que no se realizan
operaciones innecesarias en el bucle. El problema,
sin embargo, es que después de determinar
que el número 3 está en el array, el bucle
sigue ejecutándose hasta el final del array.
Lo más ineficiente sería si el número 3
se encuentra en algún lugar al principio del array, y el array mismo
tiene una longitud de, digamos, 1000 elementos.
¡Resultarían mil iteraciones inútiles y adicionales
en el bucle! No es óptimo.
Optimizemos el código, deteniendo el bucle a tiempo:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$exists = false;
foreach ($arr as $elem) {
if ($elem == 3) {
$exists = true;
break;
}
}
var_dump($exists);
?>
El siguiente código calcula cuántos
elementos del array se necesitan sumar
para que la suma sea mayor a 10.
Realice la optimización:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$sum = 0;
$i = 1;
foreach ($arr as $elem) {
$sum += $elem;
if ($sum <= 10) {
$i++;
}
}
echo $i;
?>
El siguiente código muestra números pares de un intervalo dado. Realice la optimización:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0) {
echo $i;
}
}
?>
El siguiente código muestra números
divisibles simultáneamente por 2
y por 3. Realice la optimización:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0 and $i % 3 === 0) {
echo $i;
}
}
?>