PHP ตอนที่ 3 ลูป ( Loop )

php loop การทำซ้ำหรือการวนซ้ำ ( Loop ) เวลาเราเขียนโปรแกรมขึ้นมาจะไม่พ้นการสั่งให้โปรแกรมของเราวนทำงานซ้ำๆเช่น ต้องการให้แสดงตารางซ้ำๆ ต้องการให้แสดงเป็นแถวซ้ำๆ ประมาณนี้ loop มีทุกภาษานั่นหมายความว่าถ้าคุณเข้าใจ concept มันแล้วภาษาอื่นๆก็แค่เขียนแตกต่างกันครับ

เข้าใจ PHP Loop ( ลูป ) ก่อนว่าคืออะไร ?

php overview
php overview

อย่างที่บอกไปข้างต้นว่า เราใช้งานพวกคอมพิวเตอร์ในการทำงานซ้ำๆ เราเขียนโปรแกรมขึ้นมาหรือเว็บขึ้นมาก็เพื่อให้มันทำงานอะไรที่ซ้ำๆได้เร็วกว่าคนทำ เช่น งานเอกสารต้องทำซ้ำๆเหมือนเดิมเราก็เขียนโปรแกรมขึ้นมาจัดการ ได้หรือแม้แต่ใน code ที่เราเขียนนั้นก็มีส่วนในการทำซ้ำๆเยอะเช่นกัน

เรามาดูว่าลูปที่ใช้งานกันจริงๆตอนไหนบ้าง ยกตัวอย่างเช่น

ตัวอย่าง php loop
ตัวอย่าง php loop

จากรูปจะเห็นว่าตรงที่ตีกรอบมันคือการทำซ้ำๆ แต่ละแถวจะมีรูปแบบการจัดวางซ้ำๆกัน คือ มีรูปภาพ และเนื้อหาอยู่ด้านขวามือถ้าเราประยุกต์จากสองบทที่ผ่านมาเราจะเข้าว่ามันคือเอา html ที่เป็น table มาวนลูปตรง <tr> …. </tr> นั่นเองครับ

ลองเล่นกับ PHP Loop กัน

ลูปใน PHP มีหลายแบบมากครับ อ่านถึงตรงนี้ผมจะทำแบบเป็นสารบัญของ loop ให้นะครับ

For loop

สำหรับลูปตัวแรกที่เราจะไปเรียนรู้กันคือ For loop ครับรูปแบบการใช้งานจะเป็นแบบนี้ครับ

<?php

for ([กำหนดตัวแปรสำหรับเริ่มต้น]; [ถ้าตรงเงื่อนไขจะยังวนลูป]; [เพิ่มค่าตัวแปรไปเรื่อยๆจนกว่าจะพ้นเงื่อนไข]) {
  // ให้ทำอะไรซักอย่างซ้ำๆ 
}
?>

อ่านข้างบนแล้วอาจจะงงๆ อะไรวะ ? เราไปดูวิธีใช้งานง่ายๆดีกว่าครับ

<?php 
for ($x = 0; $x <= 10; $x++) {
  echo "The number is: $x <br>";
} 
?>

จากโค้ดด้านบนจะได้ผลลัพธ์คือมันจะ แสดงประโยคว่า

The number is: 0
The number is: 1
The number is: 2
…..
The number is: 10

ซึ่งจะเห็นว่าเป็นการทำอะไรซ้ำๆวนๆไปครับ โดยตอนแรกเราจะกำหนดตัวแปรชื่อว่า $x ให้มีค่าเริ่มต้นเท่ากับ 0 และต่อมาเราทำการเอาค่า $x ไปเช็คเงื่อนไขว่า

ค่า x ต้องมีค่าน้อยกว่าหรือเท่ากับ 10

ถ้าหากยังตรงกับเงื่อนไขนี้โปรแกรมของเราจะทำการสิ่งที่อยู่ในลูปต่อไปอีกใน code ตัวอย่างก็คือ การแสดงผลประโยคว่า The number is: แล้วตามด้วยค่าของ $x ครับ ส่วนในท้ายของประโยคตรงที่เป็น <br> จากที่เราได้เรียนรู้เกี่ยวกับ html แล้ว

มันคือการขึ้นบรรทัดใหม่แล้วเอามาต่อในประโยคครับ ส่วนอันสุดท้ายคือการเพิ่มค่าให้ $x ทีละ 1 หลังจากทำจบ 1 รอบแล้วค่า $x ก็เลยเพิ่มขึ้นเรื่อยๆ

คราวนี้เรามาลองไล่ดูว่า php มันทำงานอย่างไรในลูปกัน ตอนเริ่มรันโปรแกรม php มันก็เช็คว่า อ๋อตรงนี้เป็นลูปนี้เขียนเงื่อนไขยังไงมาล่ะ ไหนดูหน่อย

อ๋อกำหนดค่า $x = 0 นะเสร็จแหละดูว่า $x มันน้อยกว่าหรือเท่ากับ 10 อยู่ไหม ถ้าใช่เริ่มทำสิ่งที่อยู่ในลูป หลังจากทำเสร็จก็เพิ่มค่าให้ $x ทีละ 1 ในรอบถัดไปค่า $x ก็จะเป็น 1 แล้วก็เริ่มกระทำการเช็คเหมือนเดิมครับ

หลังจากนี้พวกลูปจะทำงานคล้ายๆกันหมดครับแตกต่างกันตรง การเช็คเงื่อนไขก่อนหรือหลังทำ โอเคเราไปรู้จักลูปตัวอื่นๆกันดีกว่าครับ

Ex 1: อยากให้แสดงผลลัพธ์แสดงเลขตั้งแต่ 1 – 1000 โดยต้องขึ้นบรรทัดใหม่ทุกครั้ง แสดงออกทางหน้าจอ โดยใช้ for loop

While loop

ต่อไปเราไปรู้จัก while loop วิธีการเขียนตามนี้เลยครับ

<?php
while (condition is true) {
  code to be executed;
}

?>

อันนี้ดูง่ายกว่าการใช้ for loop เราไปดูตัวอย่างการใช้งานจริงๆดูครับ

<?php 
$x = 1; 

while($x <= 5) {
  echo "The number is: $x <br>";
  $x++;
} 
?>

ลูปของ while นั้นมันจะแตกต่างกับ for ตรงเราต้องกำหนดเงื่อนไขเองหรือกำหนดการเพิ่มค่าเองครับ หรือไม่ต้องเพิ่มแต่อาจจะเป็นการเปลี่ยนแปลงค่าอย่างใน code ตัวอย่างนั้นเราจะเห็นว่า เราต้องกำหนดตัวแปร $x = 1 ตั้งแต่แรกและมันจะทำการวนทำซ้ำอยู่ 5

โดยในตัวอย่าง code นั้นทำให้เราได้เห็นว่าเมื่อ x++ ( อันนี้เป็นวิธีเขียนแบบย่อนะครับความเป็นจริงคือมีค่าเท่ากับ $x = $x + 1; แบบนี้ครับ ) เพิ่มขึ้นเกิน 5 เมื่อไหร่แล้วนั้นมันก็จะหยุดทำพวก code ในลูปนั้นๆครับ

EX 2: ให้ทำการ echo ประโยคว่า “This is a strong text” โดยเป็นตัวหนา และขึ้นบรรทัดใหม่ทุกครั้ง ทำซ้ำ 10 ครั้ง

Do while loop

ลูปต่อมาที่เราจะเรียนกันคือ do while loop จำได้ง่ายๆเหมือนแปลเลยครับ ทำก่อนเช็คเงื่อนไขทีหลัง เหมาะสำหรับพวกแนวๆ ต้องทำอะไรซักอย่างก่อนแล้วค่อยเช็คเงื่อนไข ยกตัวอย่างเช่น ต้องการแสดงข้อมูลอย่างน้อย 1 แถวก่อน ก็สามารถใช้ do while ได้ครับแล้วค่อยเช็คเงื่อนไขต่อว่าต้องวนลูปไหมครับเราไปดูวิธีการใช้งานกันเลยดีกว่าครับ

do {
  code to be executed;
} while (condition is true);

จะเห็นว่ามันจะรันคำสั่งที่อยู่ในลูปเลย แล้วค่อยมาเช็คเงื่อนไขอีกที

<?php 
$x = 1; 

do {
  echo "The number is: $x <br>";
  $x++;
} while ($x <= 5);
?>

ในตัวอย่างลูปนี้จะแสดงประโยค The number is: 0 ไปอีกเรื่อยๆจน 5 ครับ

EX 3: ทำการแสดงผลทางหน้าจอโดยต้องแสดงเป็นประโยคว่า “This is a first round” แค่ครั้งเดียวโดยไม่ใช้ break

foreach loop

ลูปตัวสุดท้ายนี้คือ foreach โดยจะเอาไว้สำหรับการวนตามจำนวน array ใครจำไม่ได้ก็อย่าลืมกลับไปอ่านบทนี้ครับ https://www.oxygenyoyo.com/2021/01/24/php-ep-two-variable-function/

จะเห็นว่าเมื่อเราสามารถเก็บค่าใส่ในตัวแปรเดียวแล้วก็สามารถวนเอาค่าพวกนั้นออกมาได้ครับเอาล่ะพูดเยอะไม่เห็นภาพไปดูกันครับ

<?php 
$colors = array("red", "green", "blue", "yellow"); 

foreach ($colors as $value) {
  echo "$value <br>";
}

$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");

foreach($age as $x => $val) {
  echo "$x = $val<br>";
}
?>

ในตัวอย่างนี้เราจะให้ดูการเรียกดูค่าจาก array ทั้งสองแบบเลยครับโดยตัวอย่างแรกเราจะวนลูปจากตัวแปร array ที่ชื่อว่า $colors ( tip: เวลาตั้งชื่อตัวแปร array ต้องเป็น prural nouns หมายความว่าตั้งชื่อแล้วเติม s ตามกฎที่เราท่องๆกันตอนเด็กๆเลยครับ ถ้าลงท้ายด้วย y ก็เปลี่ยนเป็น i เติม es นั่นแหละ ) โดยเราจะรับค่าจากใน array แต่ละรอบที่ชื่อว่า $value

ผลลัพธ์จากวนลูปเราจะเห็นชื่อสีแต่ละอันแสดงในหน้าจอครับ และอีกตัวอย่างถัดมานั้นจะทำให้เราได้รู้ว่าเราสามารถเอาค่าที่เป็น index ของ array มาแสดงผลได้เหมือนกันครับ

EX 4: กำหนดให้มีตัวแปร array เป็นแบบนี้

<?php
  $x = ['john' => 'snow', 'tanny' => 'soft', 'jenny' => 'fury'];
?>

โดยให้แสดงเป็นแบบนี้ทางหน้าจอ แบบด้านล่าง
firstname: john surname: snow
firstname: tanny surname: soft
firstname: jenny surname: fury

Break / Continue

เอาล่ะหลังเราเรียกรู้เรื่องการวนลูปแล้ว อาจจะมีคำถามว่า แล้วจะออกจากลูปยังไงดีครับ ยกตัวอย่าง เช่น เราอาจจะทำการวนลูปจนกว่าเราจะเข้าเงื่อนไขบางอย่างแล้วทำการออกจากลูปเลย อย่างนี้ทำอย่างไร หรือ ในอีกกรณีหนึ่งคือถ้าเราเช็คเจอค่าบางอย่างเราจะให้ skip ไปเลยไม่ต้องทำอะไรในลูปนั้น เอาล่ะพูดมากจะงงไปดู code กันเลย

<?php 
for ($x = 0; $x <= 10; $x++) {

  if ($x === 9) {
     break;
  }

  if ($x === 2) {
     continue;
  }

  echo "The number is: $x <br>";
} 
?>

ผลลัพธ์ของ code ด้านบนนั้นจะไม่มีบรรทัดนี้ The number is: 2 และลูปนี้จะไปถึงแค่ 8 เท่านั้นเพราะพอจบรอบที่ 8 นั้นขึ้นรอบที่ 9 มันจะเข้าเงื่อนไขที่บอกว่าถ้า $x มีค่าเท่ากับ 9 จะทำการ break ลูป

เรื่องการเช็คเงื่อนไขนั้นเดี๋ยวเราจะไปเรียนรู้บทต่อกับกับเรื่อง operation ด้วยครับว่ามันมีการเปรียบเทียบเงื่อนไขยังไงก็ได้นะครับ ณ ตอนนี้ให้เข้าใจไปก่อนว่า === มันคือการเปรียบเทียบค่าทั้งสองข้างและชนิดของข้อมูลด้วยแค่นี้ ถ้างงก็คิดซะว่าเป็นการเช็คว่า ซ้ายเท่ากับขวาหรือไม่ก็พอครับ

จะเห็นว่าการใช้ทั้ง continue ก็ตรงตัวทั้งคำแปลหรือการใช้งานคือ ให้กระโดดไปรอบต่อไปเลย ส่วน break ก็เหมือนกันจะหยุดตรงที่บรรทัดที่ break ทำงานครับ

EX 5: จะแสดงผลลัพธ์เหมือนตัวอย่างใน break/continue โดยต้องใช้ while loop แทน

สรุปเกี่ยวกับ PHP Loop

บทนี้เราได้รู้แล้วครับว่าการทำซ้ำๆในโปรแกรมนั้นก็เกิดจากการทำลูปต่างๆนั่นแหละโดยลูปแต่ละอย่างตั้งแต่

for loop เป็นลูปแบบต้องกำหนดค่าตั้งแต่แรก

while loop เป็นลูปเช็คเงื่อนไข

do while loop เป็นลูปแบบทำก่อนแล้วเช็คเงื่อนไขทีหลัง

foreach เป็นลูปสำหรับ array

break / continue สำหรับการหยุดลูปและการ skip รอบของการวนนั้นๆ

ในบทต่อไปนั้นเราจะไปเรียนรู้เกี่ยวกับเรื่อง operation และการเช็คเงื่อนไขต่างๆ ครับ

เฉลย

ex 1

<?php
        //Enter your code here, enjoy!

for($i = 0; $i <= 1000; $i++) {
   echo "$i<br/>";
}


?>

ex 2

<?php 
$x = 1; 

while($x <= 10) {
  echo "<b>This is a strong text </b><br>";
  $x++;
} 
?>

ex 3

<?php 
$x = 1; 

do {
  echo "This is a first round";
  $x++;
} while ($x >1);
?>

ex 4

<?php
  $x = ['john' => 'snow', 'tanny' => 'soft', 'jenny' => 'fury'];
  
  foreach($x as $firstname => $surname) {
      echo "firstname: $firstname surname: $surname <br>";
  }
?>

ex5

<?php 
$x = 0;
while ($x <= 10; $x++) {

  if ($x === 9) {
     break;
  }

  if ($x === 2) {
     continue;
  }

  echo "The number is: $x <br>";
  $x++;
} 
?>

หลายคนอาจจะเริ่มมีคำถามว่า …

จากที่เราเรียนกันมาเนี้ย เมื่อไหร่เราจะได้ทำเว็บ (วะ) อย่าบอกตรงนี้ว่าต้องใจเย็นๆครับ การทำเว็บเสร็จโดยที่คุณไม่มีพื้นฐานมันไม่ได้ช่วยให้คุณทำงานได้นะครับ แต่การที่คุณมีพื้นฐานจะทำให้คุณสามารถทำได้มากกว่าเว็บอีก เพราะฉะนั้นอยากให้คุณใจเย็นๆ และผมจะพยายามพาคุณผู้อ่านไปทำเว็บให้ได้จริงๆครับ

โดยการทำเว็บมันจะประกอบด้วยอย่างน้อย 4 ภาษาที่คุณต้องเข้าใจนั่นแหละถึงเป็นที่มาว่าทำไมคุณต้องค่อยๆเรียนไปทีละขั้นครับแล้วภาษาทางฝั่งหลังบ้านเนี้ยคือเข้าใจยากระดับหนึ่งเพราะไม่มีหน้าตามาให้เราเห็นครับ

กลับไปหน้าสารบัญ

Message us