การลดการวนซ้ำที่เกินจำเป็นใน PHP
ในโค้ดต่อไปนี้ โปรแกรมเมอร์คนหนึ่งกำลังตรวจสอบว่า
ในอาเรย์มีตัวเลข 3 หรือไม่:
<?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
$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);
?>
โค้ดต่อไปนี้นับจำนวนองค์ประกอบของอาเรย์ที่ต้องบวก
เพื่อให้ผลรวมมากกว่า 10
ทำการเพิ่มประสิทธิภาพ:
<?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;
?>
โค้ดต่อไปนี้แสดงเลขคู่ จากขอบเขตที่กำหนด ทำการเพิ่มประสิทธิภาพ:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0) {
echo $i;
}
}
?>
โค้ดต่อไปนี้แสดงตัวเลข
ที่หารด้วย 2
และ 3 ลงตัวพร้อมกัน ทำการเพิ่มประสิทธิภาพ:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0 and $i % 3 === 0) {
echo $i;
}
}
?>