Optimering av unødvendige løkkegjennomganger i PHP

I følgende kode sjekker en programmerer om tallet 3 finnes i arrayet:

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

Hva er galt med løsningen hans? Det ser ut til at ingen unødvendige operasjoner gjøres i løkken. Problemet, likevel, er at etter det er avgjort at tallet 3 finnes i arrayet - fortsetter løkken å gå til slutten av arrayet.

Mest irrasjonelt vil det være hvis tallet 3 blir funnet et sted i begynnelsen av arrayet, mens selve arrayet har en lengde på, for eksempel, 1000 elementer. Da vil det bli tusen ubrukelige, unødvendige iterasjoner av løkken! Ikke optimalt.

La oss optimalisere koden ved å stoppe løkken i tide:

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 i arrayet som må legges sammen for at summen skal bli større enn 10. Utfør optimalisering:

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 skriver ut partall fra et gitt intervall. Utfør optimalisering:

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

Følgende kode skriver ut tall som er delelige samtidig på 2 og på 3. Utfør optimalisering:

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