Tối ưu hóa các vòng lặp thừa trong PHP

Trong đoạn mã sau, một lập trình viên nào đó đang kiểm tra xem số 3 có trong mảng hay không:

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

Có gì không ổn với giải pháp của anh ta? Có vẻ như không có thao tác thừa nào trong vòng lặp. Vấn đề, tuy nhiên, là sau khi xác định được rằng số 3 có trong mảng - vòng lặp vẫn tiếp tục chạy cho đến hết mảng.

Sẽ không hiệu quả nhất nếu số 3 được tìm thấy ở đâu đó gần đầu mảng, còn bản thân mảng lại dài, chẳng hạn, 1000 phần tử. Như vậy sẽ có một nghìn lần lặp vô dụng, thừa thãi! Không tối ưu chút nào.

Hãy tối ưu hóa mã bằng cách dừng vòng lặp đúng lúc:

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

Đoạn mã sau đếm xem cần cộng bao nhiêu phần tử của mảng để tổng trở nên lớn hơn 10. Hãy thực hiện tối ưu hóa:

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

Đoạn mã sau in ra các số chẵn từ một khoảng cho trước. Hãy thực hiện tối ưu hóa:

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

Đoạn mã sau in ra các số chia hết đồng thời cho 2 và cho 3. Hãy thực hiện tối ưu hóa:

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