Otimização de iterações desnecessárias de loop em PHP
No código a seguir, um determinado programador verifica
se o número 3 está presente no 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);
?>
O que há de errado com a solução dele? Parece que nenhuma
operação desnecessária está sendo feita no loop. O problema,
no entanto, é que depois que é determinado
que o número 3 está no array - o loop
continua executando até o final do array.
O mais irracional será se o número 3
for encontrado em algum lugar no início do array, e o próprio array
tiver um comprimento de, digamos, 1000 elementos.
Isso resultaria em mil iterações de loop inúteis e desnecessárias!
Não é ideal.
Vamos otimizar o código, parando o loop no momento adequado:
<?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);
?>
O código a seguir calcula quantos
elementos do array precisam ser somados
para que a soma se torne maior que 10.
Execute a otimização:
<?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;
?>
O código a seguir imprime números pares de um intervalo determinado. Execute a otimização:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0) {
echo $i;
}
}
?>
O código a seguir imprime números
que são divisíveis simultaneamente por 2
e por 3. Execute a otimização:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0 and $i % 3 === 0) {
echo $i;
}
}
?>