Optimering af unødvendige loop-gennemløb i PHP

I følgende kode tjekker en programmør, om arrayet indeholder tallet 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);
?>

Hvad er der galt med hans løsning? Umiddelbart ser det ud til, at der ikke udføres nogen unødvendige operationer i loopet. Problemet er imidlertid, at efter det er blevet fastslået, at tallet 3 er i arrayet, fortsætter loopet stadig med at køre til slutningen af arrayet.

Det mest urationelle vil være, hvis tallet 3 bliver fundet et sted i starten af arrayet, mens selve arrayet har en længde på, for eksempel, 1000 elementer. Det vil resultere i tusind ubrugelige, unødvendige loop-iterationer! Ikke optimalt.

Lad os optimere koden ved at stoppe loopet til tiden:

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

Følgende kode beregner, hvor mange elementer af arrayet der skal lægges sammen, før summen bliver større end 10. Udfør optimering:

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

Følgende kode udskriver lige tal fra et givet interval. Udfør optimering:

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

Følgende kode udskriver tal, der er delelige med både 2 og 3. Udfør optimering:

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