Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

ลูป foreach ใน PHP

บทนำ

คำสั่ง foreach เป็นหนึ่งในคอนสตรัคต์ลูปที่ PHP เสนอ คำสั่งลูปอื่นๆ - while, do while และ for - ใช้สร้างลูปแบบมีเงื่อนไขหรือนับจำนวน ส่วน foreach loop เหมาะสำหรับการวนรอบโครงสร้างอาร์เรย์ การใช้งาน foreach statement ดังนี้:

รูปแบบไวยากรณ์

foreach (array_expression as $value)     statement foreach (array_expression as $key => $value)     statement

รูปแบบแรกของ foreach วนรอบองค์ประกอบในอาร์เรย์ดัชนี (indexed array) ในแต่ละรอบ ตัวแปร $value จะถูกตั้งค่าเป็นองค์ประกอบปัจจุบันในอาร์เรย์ PHP ติดตามตัวชี้ภายใน (internal pointer) โดยเลื่อนไปยังองค์ประกอบถัดไป จนถึงปลายอาร์เรย์ ค่าของแต่ละองค์ประกอบจะถูกประมวลผลโดยบอดี้ของลูปที่ตามหลังคำสั่ง foreach

รูปแบบที่สองเหมาะสำหรับการเดินทางอาร์เรย์อาสอซิเอทีฟ (associative array) ทุกรอบจะแตกแยกองค์ประกอบปัจจุบันใน $key และ $variable หลังประมวลผลบอดี้ลูป ตัวชี้อาร์เรย์จะเลื่อนไปคู่คีย์-ค่าถัดไป จนอาร์เรย์หมด

ตัวอย่างต่อไปนี้เดินทางอาร์เรย์ดัชนีด้วย foreach loop:

ตัวอย่าง

<?php $arr = array(2,4,6,8,10); foreach ($arr as $i){     echo $i . "*2=" . $i*2 . "\n"; } ?>

ผลลัพธ์

2*2=4 4*2=8 6*2=12 8*2=16 10*2=20

ตัวอย่างต่อไปนี้แสดงการเดินทางอาร์เรย์อาสอซิเอทีฟด้วย foreach loop:

ตัวอย่าง

<?php $arr = array("Phy"=>50, "Che"=>60, "Maths"=>70, "Bio"=>80); foreach ($arr as $sub=>$marks){     echo "marks in $sub: " . $marks . "\n"; } ?>

ผลลัพธ์

marks in Phy: 50 marks in Che: 60 marks in Maths: 70 marks in Bio: 80

อาร์เรย์สองมิติถูกเดินทางโดยใช้ nested foreach loops:

ตัวอย่าง

<?php $arr1=[1,2,3,4,5]; $arr2=[6,7,8,9,10]; $twodim=[$arr1,$arr2]; foreach ($twodim as $row){     foreach ($row as $col){         echo $col . " ";     }     echo "\n"; } ?>

ผลลัพธ์

1 2 3 4 5 6 7 8 9 10

ตัวอย่าง

อาร์เรย์สองมิติของอาร์เรย์อาสอซิเอทีฟถูกเดินทางในตัวอย่างต่อไปนี้:

ตัวอย่าง

<?php $arr1=["rno"=>1, "name"=>"Kiran", "marks"=>50]; $arr2=["rno"=>2, "name"=>"anil", "marks"=>60]; $arr3=["rno"=>3, "name"=>"Bina", "marks"=>70]; $twodim=[$arr1,$arr2, $arr3]; foreach ($twodim as $row){     foreach ($row as $k=>$v){         echo $k . ":" . $v . " ";     }     echo "\n"; } ?>

ผลลัพธ์

rno:1 name:Kiran marks:50 rno:2 name:anil marks:60 rno:3 name:Bina marks:70