การลดการวนซ้ำที่เกินจำเป็นใน PHP

ในโค้ดต่อไปนี้ โปรแกรมเมอร์คนหนึ่งกำลังตรวจสอบว่า ในอาเรย์มีตัวเลข 3 หรือไม่:

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

มีอะไรผิดปกติกับวิธีแก้ปัญหาของเขาหรือ? ดูเหมือนว่า จะไม่มีการดำเนินการที่เกินจำเป็นในลูป ปัญหา อย่างไรก็ตาม คือหลังจากที่ตรวจสอบได้แล้วว่า ตัวเลข 3 มีอยู่ในอาเรย์ - ลูป ก็ยังคงทำงานต่อไปจนกว่าจะถึงจุดสิ้นสุดของอาเรย์

สิ่งที่ไม่มีประสิทธิภาพที่สุดคือ ถ้าตัวเลข 3 ถูกพบที่ไหนสักแห่งในตอนต้นของอาเรย์ ในขณะที่อาเรย์เอง มีความยาว สมมติ 1000 องค์ประกอบ ผลลัพธ์คือการวนซ้ำที่ไร้ประโยชน์เกินจำเป็นถึงหนึ่งพันครั้ง! ไม่เหมาะสม

มาเพิ่มประสิทธิภาพโค้ดโดยหยุดลูปในเวลาที่เหมาะสม:

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

โค้ดต่อไปนี้นับจำนวนองค์ประกอบของอาเรย์ที่ต้องบวก เพื่อให้ผลรวมมากกว่า 10 ทำการเพิ่มประสิทธิภาพ:

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

โค้ดต่อไปนี้แสดงเลขคู่ จากขอบเขตที่กำหนด ทำการเพิ่มประสิทธิภาพ:

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

โค้ดต่อไปนี้แสดงตัวเลข ที่หารด้วย 2 และ 3 ลงตัวพร้อมกัน ทำการเพิ่มประสิทธิภาพ:

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