Pengoptimuman Lepasan Gelung Berlebihan dalam PHP

Dalam kod berikut, seorang pengaturcara menyemak sama ada nombor 3 wujud dalam array:

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

Apa yang salah dengan penyelesaiannya? Nampaknya tiada operasi berlebihan dilakukan dalam gelung. Masalahnya, bagaimanapun, ialah selepas ditentukan bahawa nombor 3 wujud dalam array - gelung masih berterusan hingga akhir array.

Yang paling tidak rasional adalah jika nombor 3 ditemui di suatu tempat di awal array, manakala array itu sendiri panjangnya, katakan, 1000 elemen. Ini akan menghasilkan seribu lelaran gelung berlebihan yang tidak berguna! Tidak optimum.

Mari optimumkan kod dengan menghentikan gelung pada masa yang tepat:

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

Kod berikut mengira berapa banyak elemen array yang perlu ditambah, supaya jumlahnya menjadi lebih besar daripada 10. Laksanakan pengoptimuman:

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

Kod berikut mengeluarkan nombor genap dari julat yang diberikan. Laksanakan pengoptimuman:

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

Kod berikut mengeluarkan nombor yang boleh dibahagi dengan 2 dan 3 secara serentak. Laksanakan pengoptimuman:

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