วันเสาร์ที่ 1 มีนาคม พ.ศ. 2568

[PHP] การซ้อน for (Nested Loops) และการประยุกต์ใช้ใน PHP

ถ้าพูดถึงการใช้ 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 ไปใช้งานได้อย่างมีประสิทธิภาพ 🚀

ไม่มีความคิดเห็น:

แสดงความคิดเห็น