Apichart Nakarungutti
The Cake is a Lie
การวนรอบ (loop) ใน PHP มี 4 แบบ คือ
while
ตรวจสอบ แล้วค่อยวนรอบdo...while
ทำก่อน 1 ครั้งแล้วค่อยตรวจสอบfor
วนรอบตามจำนวนที่กำหนดforeach
วนรอบตามจำนวน element ใน arraywhile
while
จะตรวจสอบค่าก่อน หากเป็นจริง จึงวนทำตามคำสั่งภายใน หากเป็นเท็จก็จะไม่วนรอบนั้น ๆ มักใช้ในกรณีที่ไม่รู้จำนวนรอบที่แน่นอน หรือไม่ต้องการหาจำนวนรอบก่อนที่จะวน เช่น วนรอบแสดงข้อมูลจากไฟล์ หรือฐานข้อมูลเป็นต้น while
สามารถเขียนได้ 2 แบบ เช่นเดียวกับ switch
<?php
$num = 1;
echo 'Count from 1 to 10: ';
while ($num<=10) {
echo $num . ', ';
$num++;
}
$readable = false;
while ($num <= 10):
// this code is never execute.
echo 'Reading file...';
endwhile;
do...while
do...while
จะทำตามคำสั่งใน do
ก่อน 1 ครั้งแล้วค่อยตรวจสอบ หากยังเป็นจริงก็ทำใน do
อีก โดยทั่วไปแล้วแทบไม่ต่างจาก while
เลย แต่การใช้ do...while
เพื่อให้มั่นใจว่า คำสั่งใน loop จะถูกสั่งแน่ ๆ อย่างน้อย 1 ครั้ง
<?php
$readable = false;
$msg = 'Checking status...';
do {
// this code will execute ONLY one time.
echo $msg . '<br />';
if ($readable == true) {
$msg = 'Reading file...';
}
} while ($readable);
for
for
จะวนตามจำนวนที่ระบุเอาไว้จนครบแล้วออกจากการวนรอบ มักใช้ในการวนรอบที่มีจำนวนแน่นอนซึ่งต่างจาก while
และ do...while
ที่มักใช้กับจำนวนรอบที่ไม่แน่นอน for
สามารถเขียนได้ 2 แบบเหมือนกับ while
<?php
echo 'Count from 1 to 10: ';
for($i = 0; $i <= 10; $i++) {
echo $i . ', ';
}
// Same as above
for($i = 0; $i <= 10; $i++):
echo $i . ', ';
endfor;
foreach
foreach
ใช้ในการวนดูข้อมูลใน array เป็นหลัก เขียนได้ 2 แบบเช่นกัน
<?php
$all_subjects = array('Math', 'Science', 'Drawing');
echo 'I learn ';
foreach($all_subjects as $subj) {
echo $subj . ', ';
}
// loop through Associative Arrays
$instructors = array(
'Math' => 'Andre Marie Ampere',
'Science' => 'Albert Einstein',
'Drawing' => 'Leonardo da Vinci',
);
foreach($instructors as $subject => $teacher):
echo $teacher . ' teach ' . $subject . '<br />';
endforeach;
// you can change value in array by use reference prefix (&)
$double_this = array(1, 2, 3, 4, 5);
foreach($double_this as &$num) {
$num = $num * 2;
}
// $double_this = array(2, 4, 6, 8, 10)
break
และ continue
break
จะเป็นการออกจากการวนรอบก่อนที่จะครบตามที่กำหนดไว้
<?php
// print: Count from 1 to 5: 1, 2, 3, 4, 5,
echo 'Count from 1 to 5: ';
for($i = 0; $i <= 10; $i++) {
if ($i > 5) {
// break out of loop
break;
}
echo $i . ', ';
}
continue
จะข้ามรอบนั้น ๆ ไป แต่ยังวนรอบอยู่เหมือนเดิม
<?php
// print: Simple even number: 2, 4, 6, 8, 10,
echo 'Simple even number: ';
for($i = 1; $i <= 10; $i++) {
if (($i % 2) == 1) {
// Odd number? skip this loop
continue;
}
echo $i . ', ';
}
จากบทความเรื่อง if...else
และ switch
กับเรื่องการวนรอบ จะเห็นว่า ใน PHP จะมีคำสั่ง หรือ syntax ทางเลือกอยู่หลายแบบ สรุปรวมเท่าที่เขียนมาทั้งหมดจะมี
if...else
ที่ใช้ if ():
(ร่วมกับ else:
และ/หรือ elseif ():
) และปิดด้วย endif;
switch
ที่ใช้ switch ():
และปิดด้วย endswitch;
while
ที่ใช้ while ():
และปิดด้วย endwhile;
for
ที่ใช้ for ():
และปิดด้วย endfor;
foreach
ที่ใช้ foreach ():
และปิดด้วย endforeach;