สยามเว็บโฮส โฮสติ้งดี ราคาถูก

วัตถุประสงค์การก่อตั้งฯ
ห้องพระ-ชำระจิตใจ
เรื่องสั้น-บทความ
บทกลอน-บทกวี
เกมส์ออนไลน์
ตำหนักเพลงไทยเดิม
เซียมซีเสี่ยงโชค
กระดานสนทนา
ข่าวฝากประชาสัมพันธ์
กระดานซื้อ-ขายสินค้า
ฟรีอีเมล์เนื้อที่ 5 MB
ติดต่อ นายทะเบียน
Add to Favorites

ทั่วโลก www
ชมรมเว็บเพจไทย

Power by Google!
สนับสนุนพื้นที่ Hosting

สยามเว็บโฮสดอทคอม
สนับสนุนค่าโดเมนเนม

www.prakunpai.com

 


บทความเรื่อง การสร้างเว็บเพจโดยใช้ภาษา PHP โดย เรวัต ศิริโภคาภิรมย์ (Rawat Siripokarpirom)
ชมรมเว็บเพจไทย นำมาเผยแพร่ ภายใต้ลิขสิทธิ์ของ Open Content License หรือ OPL เวอร์ชั่น 1.0

การสร้างเว็บเพจโดยใช้ภาษา PHP ตอนที่ 13

การทำขั้นตอนซ้ำหรือวนลูป

การวนลูปหรือสร้างลูปเพื่อทำงานซ้ำเป็นส่วนประกอบสำคัญของโปรแกรมคอมพิวเตอร์ ในภาษา PHP ก็จะใช้โครงสร้างเหมือนภาษาซี ดังต่อไปนี้

  • while-do loop
  • do-while loop
  • for-loop
ตัวอย่างการใช้ while-do loop เพื่อคำนวณค่า เลขยกกำลังสอง ซึ่งมีเลขฐานตั้งแต่ 1 ถึง 10
 
<?

$x = 1;
while ($x <= 10) {
  echo $x*$x,"\n";
  $x++;
}

?>

เริ่มต้นด้วยการกำหนดตัวแปร $x ให้มีค่าเป็นหนึ่ง ซึ่งในกรณีนี้ เราใช้เป็นเลขฐาน ในการคำนวณเลขยกกำลังสอง เมื่อเข้าสู่การวนลูปแบบ while-do จะมีการตรวจดูเงื่อนไข ของการวนลูปในแต่ละครั้งว่า เงื่อนไขเป็นจริงอยู่หรือไม่ ในกรณีนี้ เรากำหนดเงื่อนไขในการวนลูปไว้ว่า ถ้าค่าของ $x มีค่าน้อยกว่าหรือเท่ากับ 10 ก็ให้ทำคำสั่งที่อยู่ภายในลูป ซึ่งก็คือ echo $x*$x,"\n"; โดยจะพิมพ์ค่าของผลคูณซึ่งหมายถึงเลขยกกำลังสองนั่นเอง หลังจากนั้น ก็ให้เพิ่มค่าของ $x ทีละหนึ่งในการวนลูปแต่ละครั้ง ค่าของ $x จะเพิ่มขึ้นเรื่อยๆจนมีค่ามากกว่า 10 เมื่อถึงเวลานั้น ก็จะเป็นการจบการวนลูป เพราะว่า เราจะได้ว่า เงื่อนไข ($x <= 10) มีค่าเป็นเท็จ

สมมุติว่า ถ้าเปลี่ยนจาก $x++ เป็น $x--  ปัญหาก็จะเกิดตามมาเวลาใช้งาน คือ แทนที่จะวนลูปแค่สิบครั้ง ก็กลับกลายเป็นว่า เป็นการวนลูปนับครั้งไม่ถ้วน เพราะว่า ค่าของ $x จะลดลงเรื่อยๆในการวนลูปแต่ละครั้ง คือเป็นลบ และค่าเป็นลบจะน้อยกว่า 10 เสมอ (ยกเว้นแต่ว่า เมื่อถึงจุดเวลาหนึ่งค่าเป็นลบมากๆ จะกระโดดกลับเป็นบวก)

ตัวอย่างการใช้ do-while loop เพื่อคำนวณค่าเลขยกกำลังสอง ซึ่งมีเลขฐานตั้งแต่ 1 ถึง 10
 
<?

$x = 1;
do {
  echo $x*$x,"<BR>\n";
  $x++;
} while ($x < 10);

?>

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

อีกแบบหนึ่งสำหรับการวนลูปคือใช้ for-loop ทำได้ตามตัวอย่างต่อไปนี้
 
<?

for ($x = 1; $x <=10; $x++) {
  echo $x*$x,"<BR>\n";
}

?>

ในบรรทัดที่เริ่มต้นด้วย for ระหว่างวงเล็บเปิดและปิด จะถูกแบ่งเป็นสามส่วนโดยเครื่องหมาย semicolon (;) ในส่วนแรกเราสามารถใส่คำสั่งที่ต้องการจะกระทำก่อนเข้าลูป ส่วนแรกนี้จะมีหรือไม่มีก็ได้ ในส่วนที่สองจะเป็นเงื่อนไขสำหรับการทำ loop และในส่วนที่สามจะคำสั่งที่จะต้องทำเป็นการจบท้ายลูปในแต่ละครั้ง หลักการทำงานของ for-loop จะคล้ายกับ  while-do-loop

การใช้งาน for-loop และวางตำแหน่งส่วนต่างๆ อาจจะไม่จำเป็นต้องทำเหมือนกันแต่ให้ผลเหมือนกัน เช่น
 
<?

$x=1;
for ( ; $x <=10; $x++) {
  echo $x*$x,"<BR>\n";
}

$x=1;
for ( ; $x <=10; )  {
  echo $x*$x,"<BR>\n";
  $x++;
}

?>

จากตัวอย่างข้างบนที่ผ่านๆมา เป็นการวนลูปจะใช้การนับเลขเพิ่มขึ้นทีละหนึ่ง เรายังสามารถเขียนใหม่โดยเป็นการนับเลขลดลง ยกตัวอย่างเช่น เราต้องการจะพิมพ์ตัวเลขเรียงลำดับจาก 10,9,8...,1 ก็อาจจะเขียนคำสั่งได้ดังนี้

<?

for ($x=10 ; $x >0; $x--)  {
    echo $x,"<BR>\n";
}

?>

การใช้งาน for-loop ก็จะเหมือนกับเวลาใช้ในภาษาซี ในหลายๆเรื่อง เช่น เราสามารถใส่คำสั่งได้ มากกว่าหนึ่งโดยใช้เครื่องหมาย (,) เป็นตัวแยก ตัวอย่างเช่น

<?

for ($x=1, $y=0 ; $x < 10; $x++, $y--)  {
    echo "$x $y<BR>\n";
}

?>


ชมรมเว็บเพจไทย ตั้งใจมุ่งมั่น สร้างสรรค์เพื่อมวลสมาชิก



เริ่มนับ 20 พฤศจิกายน 2547 เวลา 24.00 น.

ชมรมเว็บเพจไทย เป็นเว็บไซต์ที่จัดทำขึ้นเพื่อเผยแพร่ข่าวสารและสาระความรู้เกี่ยวกับการสร้างเว็บไซต์ ให้แด่สมาชิกและผู้สนใจทั่วไป
โดยไม่หวังผลประโยชน์ทางธุระกิจ [Non Profit Organization] ก่อตั้งเมื่อวันที่ 16 ตุลาคม พ.ศ. 2540
ข้อมูลข่าวสาร บทความ และภาพประกอบ ที่ไม่อ้างถึงเจ้าของลิขสิทธิ์ สามารถนำไปใช้ได้โดยไม่ต้องขออนุญาต [Non Copyright]