Optimisation des passages inutiles de boucle en PHP
Dans le code suivant, un certain programmeur vérifie
si le nombre 3 est présent dans le tableau :
<?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-ce qui ne va pas avec sa solution ? Apparemment,
aucune opération superflue n'est effectuée dans la boucle.
Le problème, cependant, est qu'après avoir déterminé
que le nombre 3 est dans le tableau - la boucle
continue de tourner jusqu'à la fin du tableau.
Ce sera le plus irrationnel si le nombre 3
est trouvé quelque part au début du tableau, et que le tableau
a une longueur de, disons, 1000 éléments.
Il en résultera mille itérations de boucle inutiles et superflues !
Pas optimal.
Optimisons le code en arrêtant la boucle à temps :
<?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);
?>
Le code suivant calcule combien
d'éléments du tableau doivent être additionnés
pour que la somme dépasse 10.
Effectuez l'optimisation :
<?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;
?>
Le code suivant affiche les nombres pairs d'un intervalle donné. Effectuez l'optimisation :
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0) {
echo $i;
}
}
?>
Le code suivant affiche les nombres
divisibles à la fois par 2
et par 3. Effectuez l'optimisation :
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0 and $i % 3 === 0) {
echo $i;
}
}
?>