PHP'de Gereksiz Döngü Geçişlerinin Optimizasyonu

Aşağıdaki kodda bir programcı, dizide 3 sayısının olup olmadığını kontrol ediyor:

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

Bu çözümde yanlış olan ne? Görünüşte döngüde hiçbir gereksiz işlem yapılmıyor. Ancak sorun şu ki, dizide 3 sayısının bulunduğu belirlendikten sonra - döngü yine de dizinin sonuna kadar dönmeye devam ediyor.

En verimsiz durum, 3 sayısı dizinin başlarında bir yerde bulunursa ve dizinin uzunluğu, diyelim ki 1000 eleman olursa ortaya çıkar. Bin tane gereksiz, fazladan döngü yinelemesi olur! Optimal değil.

Kodu, döngüyü zamanında durdurarak optimize edelim:

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

Aşağıdaki kod, toplam 10'u aşana kadar diziden kaç elemanın toplanması gerektiğini hesaplıyor. Optimizasyonu gerçekleştirin:

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

Aşağıdaki kod, verilen aralıktaki çift sayıları yazdırıyor. Optimizasyonu gerçekleştirin:

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

Aşağıdaki kod, aynı anda hem 2'ye hem de 3'e bölünebilen sayıları yazdırıyor. Optimizasyonu gerçekleştirin:

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