แนะนำตัว
พยากรณ์ คำสั่งเป็นหนึ่งในโครงสร้างการวนซ้ำที่นำเสนอโดย PHP คำสั่งวนซ้ำอื่น ๆ − while, do while และ for - ถูกใช้เพื่อสร้างลูปแบบมีเงื่อนไขหรือแบบนับ ในทางกลับกัน foreach loop นั้นสะดวกมากสำหรับการวนซ้ำโครงสร้างอาร์เรย์ การใช้คำสั่ง foreach มีดังนี้ -
ไวยากรณ์
foreach (array_expression as $value) statement foreach (array_expression as $key => $value) statement
รูปแบบแรกของ foreach วนซ้ำองค์ประกอบในอาร์เรย์ที่จัดทำดัชนี ในการวนซ้ำแต่ละครั้ง ตัวแปร $value จะถูกตั้งค่าเป็นองค์ประกอบปัจจุบันในอาร์เรย์ PHP ติดตามตัวชี้ภายในโดยเลื่อนไปยังองค์ประกอบถัดไป จนถึงจุดสิ้นสุดของอาร์เรย์ ค่าของแต่ละองค์ประกอบจะถูกประมวลผลโดยเนื้อความของลูปที่ตามหลังคำสั่ง foreach
รูปแบบที่สองเหมาะสำหรับการข้ามผ่านอาร์เรย์ที่เชื่อมโยง การวนซ้ำทุกครั้งจะแตกองค์ประกอบปัจจุบันในตัวแปร $key และ $value หลังจากประมวลผลเนื้อหาของลูปแล้ว ตัวชี้อาร์เรย์จะเลื่อนไปยังคู่คีย์-ค่าถัดไปจนกว่าอาร์เรย์จะหมด
ตัวอย่างต่อไปนี้จะข้ามผ่านอาร์เรย์ที่จัดทำดัชนีโดยใช้ 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
ตัวอย่างต่อไปนี้แสดงการข้ามผ่านของ associative array กับ 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
อาร์เรย์สองมิติถูกสำรวจโดยใช้ลูป foreach ที่ซ้อนกัน
ตัวอย่าง
<?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