Оптимизација на непотребни поминувања на циклусот во PHP

Во следниот код некој програмер проверува, дали во низата се наоѓа бројот 3:

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);
?>

Што не е во ред со неговото решение? Изгледа дека не се вршат непотребни операции во циклусот. Проблемот, сепак, е во тоа што откако ќе се утврди дека бројот 3 се наоѓа во низата - циклусот сепак продолжува да се врти до крајот на низата.

Најнерационално ќе биде ако бројот 3 се најде некаде на почетокот на низата, а самата низа е со должина од, да речеме, 1000 елементи. Ќе испадне дека се прават илјада бесполезни непотребни итерации на циклусот! Не е оптимално.

Да го оптимизираме кодот, запирајќи го циклусот навреме:

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

Следниот код пресметува колку елементи од низата треба да се соберат, за збирот да стане поголем од 10. Извршете оптимизација:

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

Следниот код ги печати парните броеви од дадениот интервал. Извршете оптимизација:

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

Следниот код ги печати броевите кои се деливи истовремено со 2 и со 3. Извршете оптимизација:

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