Felesleges ciklusiterációk optimalizálása PHP-ban

A következő kódban egy programozó ellenőrzi, hogy van-e a tömbben 3 szám:

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

Mi a baj a megoldásával? Úgy tűnik, nincsenek felesleges műveletek a ciklusban. A probléma azonban az, hogy miután megállapítottuk, hogy a 3 szám benne van a tömbben - a ciklus még mindig tovább fut a tömb végéig.

Legképtelenebb az lesz, ha a 3 szám valahol a tömb elején található, maga a tömb pedig mondjuk 1000 elem hosszú. Ez ezer haszontalan felesleges iterációt jelent a ciklusban! Nem optimális.

Optimalizáljuk a kódot a ciklus időben történő leállításával:

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

A következő kód kiszámolja, hány tömb elemet kell összeadni, hogy az összeg nagyobb legyen 10-nél. Végezze el az optimalizálást:

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

A következő kód páros számokat ír ki egy adott intervallumból. Végezze el az optimalizálást:

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

A következő kód olyan számokat ír ki, amelyek egyszerre oszthatók 2-vel és 3-mal. Végezze el az optimalizálást:

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