php loop การทำซ้ำหรือการวนซ้ำ ( Loop ) เวลาเราเขียนโปรแกรมขึ้นมาจะไม่พ้นการสั่งให้โปรแกรมของเราวนทำงานซ้ำๆเช่น ต้องการให้แสดงตารางซ้ำๆ ต้องการให้แสดงเป็นแถวซ้ำๆ ประมาณนี้ loop มีทุกภาษานั่นหมายความว่าถ้าคุณเข้าใจ concept มันแล้วภาษาอื่นๆก็แค่เขียนแตกต่างกันครับ
เข้าใจ PHP Loop ( ลูป ) ก่อนว่าคืออะไร ?
อย่างที่บอกไปข้างต้นว่า เราใช้งานพวกคอมพิวเตอร์ในการทำงานซ้ำๆ เราเขียนโปรแกรมขึ้นมาหรือเว็บขึ้นมาก็เพื่อให้มันทำงานอะไรที่ซ้ำๆได้เร็วกว่าคนทำ เช่น งานเอกสารต้องทำซ้ำๆเหมือนเดิมเราก็เขียนโปรแกรมขึ้นมาจัดการ ได้หรือแม้แต่ใน code ที่เราเขียนนั้นก็มีส่วนในการทำซ้ำๆเยอะเช่นกัน
เรามาดูว่าลูปที่ใช้งานกันจริงๆตอนไหนบ้าง ยกตัวอย่างเช่น
จากรูปจะเห็นว่าตรงที่ตีกรอบมันคือการทำซ้ำๆ แต่ละแถวจะมีรูปแบบการจัดวางซ้ำๆกัน คือ มีรูปภาพ และเนื้อหาอยู่ด้านขวามือถ้าเราประยุกต์จากสองบทที่ผ่านมาเราจะเข้าว่ามันคือเอา 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 แล้วก็เริ่มกระทำการเช็คเหมือนเดิมครับ
หลังจากนี้พวกลูปจะทำงานคล้ายๆกันหมดครับแตกต่างกันตรง การเช็คเงื่อนไขก่อนหรือหลังทำ โอเคเราไปรู้จักลูปตัวอื่นๆกันดีกว่าครับ
หากอยากทดสอบแบบ online สามารถเล่นได้ที่นี่ครับ
https://www.w3schools.com/php/php_looping.asp
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://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 ภาษาที่คุณต้องเข้าใจนั่นแหละถึงเป็นที่มาว่าทำไมคุณต้องค่อยๆเรียนไปทีละขั้นครับแล้วภาษาทางฝั่งหลังบ้านเนี้ยคือเข้าใจยากระดับหนึ่งเพราะไม่มีหน้าตามาให้เราเห็นครับ