ถ้าพูดถึงการใช้ for ใน PHP หลายคนก็คงคุ้นเคยกับการวนลูปแบบพื้นฐานอยู่แล้ว เช่น การวนลูปจากเลข 1 ถึง 10 หรือการวนลูปเพื่อเข้าถึงข้อมูลในอาร์เรย์ แต่เมื่อเราต้องการจัดการข้อมูลที่ซับซ้อนมากขึ้น เช่น การทำงานกับตารางข้อมูล โครงสร้างข้อมูลหลายมิติ หรืออัลกอริธึมที่ต้องใช้การวนลูปซ้อนกัน เราก็ต้องใช้ Nested Loops หรือการซ้อน for
วันนี้เราจะมาเจาะลึกเรื่องนี้แบบเข้าใจง่าย ๆ พร้อมตัวอย่างการใช้งานจริง!
🎯 Nested for คืออะไร?
การซ้อน for (Nested Loops) หมายถึง การใช้ลูป for หนึ่งตัวอยู่ภายในอีกลูปหนึ่ง นั่นแปลว่า เมื่อแต่ละรอบของลูปหลัก (outer loop) ถูกทำงาน ลูปที่อยู่ข้างใน (inner loop) จะถูกทำงานครบทุกครั้งก่อนที่ลูปหลักจะขยับไปยังรอบถัดไป
โครงสร้างพื้นฐานของ Nested for ใน PHP มีลักษณะดังนี้:
for ($i = 0; $i < 3; $i++) { // ลูปหลัก
for ($j = 0; $j < 3; $j++) { // ลูปย่อย
echo "i = $i, j = $j <br>";
}
}
🔍 ตัวอย่าง Output:
i = 0, j = 0
i = 0, j = 1
i = 0, j = 2
i = 1, j = 0
i = 1, j = 1
i = 1, j = 2
i = 2, j = 0
i = 2, j = 1
i = 2, j = 2
ในตัวอย่างนี้ ลูป for ตัวนอก ($i) จะทำงาน 3 รอบ และในแต่ละรอบของ $i ลูป for ตัวใน ($j) จะทำงาน 3 รอบ เช่นกัน ดังนั้นลูปทั้งหมดจะถูกทำงานรวม 3 × 3 = 9 ครั้ง
📌 ตัวอย่างการใช้งาน Nested for ที่เป็นประโยชน์
1. การสร้างตาราง (Multiplication Table)
เราสามารถใช้ลูปซ้อนกันเพื่อสร้างตารางสูตรคูณง่าย ๆ ได้แบบนี้:
echo "<table border='1' cellpadding='5'>";
for ($i = 1; $i <= 12; $i++) {
echo "<tr>";
for ($j = 1; $j <= 12; $j++) {
echo "<td>" . ($i * $j) . "</td>";
}
echo "</tr>";
}
echo "</table>";
✅ ผลลัพธ์: ตารางสูตรคูณขนาด 12×12
2. การพิมพ์รูปแบบ (Pattern Printing)
🔹 พิมพ์สามเหลี่ยมดาว 🌟
$size = 5;
for ($i = 1; $i <= $size; $i++) {
for ($j = 1; $j <= $i; $j++) {
echo "* ";
}
echo "<br>";
}
✅ ผลลัพธ์:
*
* *
* * *
* * * *
* * * * *
🔹 พิมพ์สามเหลี่ยมกลับหัว 🔻
$size = 5;
for ($i = $size; $i >= 1; $i--) {
for ($j = 1; $j <= $i; $j++) {
echo "* ";
}
echo "<br>";
}
✅ ผลลัพธ์:
* * * * *
* * * *
* * *
* *
*
3. การวนลูปอาร์เรย์ 2 มิติ (Multidimensional Array)
ถ้าเรามีอาร์เรย์ 2 มิติที่เก็บข้อมูล เช่น ตารางนักเรียน เราสามารถใช้ for ซ้อนกันเพื่อดึงค่าทุกแถวออกมาได้
$students = [
["ชื่อ" => "บอย", "คะแนน" => 85],
["ชื่อ" => "หน่อย", "คะแนน" => 90],
["ชื่อ" => "ฟ้า", "คะแนน" => 78]
];
for ($i = 0; $i < count($students); $i++) {
foreach ($students[$i] as $key => $value) {
echo "$key: $value | ";
}
echo "<br>";
}
✅ ผลลัพธ์:
ชื่อ: บอย | คะแนน: 85 |
ชื่อ: หน่อย | คะแนน: 90 |
ชื่อ: ฟ้า | คะแนน: 78 |
🚀 เทคนิคการเพิ่มประสิทธิภาพของ Nested for
1. ลดจำนวนรอบที่ไม่จำเป็น
ถ้าคุณสามารถลดจำนวนรอบของลูป for ได้ มันจะช่วยเพิ่มประสิทธิภาพการทำงาน ตัวอย่างเช่น ถ้าต้องการหาคู่ที่มีผลรวมเท่ากับ 10 ในอาร์เรย์ เราอาจไม่ต้องวนลูปครบทุกคู่
$numbers = [1, 2, 3, 7, 5, 6, 4];
$target = 10;
for ($i = 0; $i < count($numbers); $i++) {
for ($j = $i + 1; $j < count($numbers); $j++) {
if ($numbers[$i] + $numbers[$j] == $target) {
echo "{$numbers[$i]} + {$numbers[$j]} = 10 <br>";
}
}
}
✅ ผลลัพธ์:
3 + 7 = 10
6 + 4 = 10
2. ใช้ break เพื่อลดรอบลูป
ถ้าพบค่าที่ต้องการแล้ว ไม่จำเป็นต้องวนลูปต่อ
for ($i = 0; $i < 10; $i++) {
for ($j = 0; $j < 10; $j++) {
if ($i * $j > 20) {
break 2; // ออกจากทั้งสองลูป
}
echo "$i * $j = " . ($i * $j) . "<br>";
}
}
🔥 สรุป
- Nested for คือการใช้ for ซ้อนกันเพื่อนำไปใช้กับข้อมูลที่มีหลายมิติ
- ใช้สร้างตารางข้อมูล, พิมพ์ลวดลาย, และประมวลผลข้อมูลหลายชั้น
- ควรปรับปรุงโค้ดเพื่อลดจำนวนรอบที่ไม่จำเป็นและใช้ break หรือ continue เพื่อเพิ่มประสิทธิภาพ
หวังว่าบทความนี้จะช่วยให้คุณเข้าใจและนำ Nested for ไปใช้งานได้อย่างมีประสิทธิภาพ 🚀
ไม่มีความคิดเห็น:
แสดงความคิดเห็น