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<?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<?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);
?>
Задание 1

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<?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;
?>
Задание 2

Le code suivant affiche les nombres pairs d'un intervalle donné. Effectuez l'optimisation :

php<?php
  for ($i = 0; $i <= 100; $i++) {
    if ($i % 2 === 0) {
      echo $i;
    }
  }
?>
Задание 3

Le code suivant affiche les nombres divisibles à la fois par 2 et par 3. Effectuez l'optimisation :

php<?php
  for ($i = 0; $i <= 100; $i++) {
    if ($i % 2 === 0 and $i % 3 === 0) {
      echo $i;
    }
  }
?>