บทนำ
คำสั่ง 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