Optimalisering van oortollige lusherhalings in PHP

In die volgende kode gaan 'n programmeerder na of die getal 3 in die skikking voorkom:

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

Wat is verkeerd met sy oplossing? Dit lyk asof daar geen oortollige bewerkings in die lus gedoen word nie. Die probleem is eger dat, nadat vasgestel is dat die getal 3 in die skikking is, die lus steeds tot die einde van die skikking voortgaan.

Die mees onrasionele sal wees as die getal 3 iewers aan die begin van die skikking gevind word, en die skikking self lank is, sê 1000 elemente. Dit sal duisend nuttelose oortollige herhalings van die lus beteken! Nie optimaal nie.

Laat ons die kode optimaliseer deur die lus betyds te stop:

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

Die volgende kode bereken hoeveel elemente van die skikking opgetel moet word vir die som om groter as 10 te word. Voer die optimalisering uit:

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

Die volgende kode druk ewe getalle uit die gegewe reeks af. Voer die optimalisering uit:

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

Die volgende kode druk getalle af wat gelyktydig deur 2 en 3 deelbaar is. Voer die optimalisering uit:

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