Optimalisatie van overbodige loopiteraties in PHP

In de volgende code controleert een programmeur of het getal 3 in de array aanwezig is:

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 er mis met zijn oplossing? Het lijkt erop dat er geen overbodige operaties in de loop worden uitgevoerd. Het probleem is echter dat nadat vastgesteld is dat het getal 3 in de array zit - de loop toch blijft doordraaien tot het einde van de array.

Het minst efficiënt zou zijn als het getal 3 ergens aan het begin van de array wordt gevonden, terwijl de array zelf bijvoorbeeld 1000 elementen lang is. Dat resulteert in duizend nutteloze, overbodige iteraties van de loop! Niet optimaal.

Laten we de code optimaliseren door de loop op tijd te stoppen:

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

De volgende code berekent hoeveel elementen van de array opgeteld moeten worden, voordat de som groter wordt dan 10. Voer de optimalisatie 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

De volgende code geeft even getallen weer uit een opgegeven bereik. Voer de optimalisatie uit:

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

De volgende code geeft getallen weer die tegelijkertijd deelbaar zijn door 2 en door 3. Voer de optimalisatie uit:

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