เป็นไปได้ไหมที่จะหาforeach
ดัชนี?
ในfor
วงดังนี้:
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i
จะให้ดัชนีกับคุณ
ฉันต้องใช้การfor
วนซ้ำหรือมีวิธีในการรับดัชนีในการforeach
วนซ้ำหรือไม่?
เป็นไปได้ไหมที่จะหาforeach
ดัชนี?
ในfor
วงดังนี้:
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i
จะให้ดัชนีกับคุณ
ฉันต้องใช้การfor
วนซ้ำหรือมีวิธีในการรับดัชนีในการforeach
วนซ้ำหรือไม่?
คำตอบ:
foreach($array as $key=>$value) {
// do stuff
}
$key
เป็นดัชนีของแต่ละ$array
องค์ประกอบ
$myarr['foo'] = 'bar';
วิธีนี้ล้มเหลว
vatiable++;
การทำซ้ำแต่ละครั้ง วิธีดั้งเดิม แต่ได้ผลเสมอ
คุณสามารถแฮ็คข้อมูลของคุณforeach
ได้เช่นเขตข้อมูลที่เพิ่มขึ้นในการเรียกใช้แต่ละครั้งซึ่งเป็นสิ่งที่for
ลูปให้คุณในอาร์เรย์ที่มีการจัดทำดัชนีตัวเลข เขตข้อมูลดังกล่าวจะเป็นดัชนีเทียมที่ต้องการการจัดการด้วยตนเอง (เพิ่มขึ้น ฯลฯ )
A foreach
จะให้ดัชนีของคุณในรูปแบบของ$key
มูลค่าของคุณดังนั้นการแฮ็คนั้นไม่จำเป็น
เช่นใน foreach
$index = 0;
foreach($data as $key=>$val) {
// Use $key as an index, or...
// ... manage the index this way..
echo "Index is $index\n";
$index++;
}
ควรสังเกตว่าคุณสามารถโทรหาkey()
อาร์เรย์ใด ๆ เพื่อหาคีย์ปัจจุบันที่อยู่ใน ในขณะที่คุณสามารถเดาได้ว่าcurrent()
จะคืนค่าปัจจุบันและnext()
จะย้ายตัวชี้ของอาร์เรย์ไปยังองค์ประกอบถัดไป
$key
จาก$key=>$value
) ... อย่างไรก็ตามฉันเดิมพันว่าประสิทธิภาพที่ต่ำกว่านั้นไม่สำคัญ / สังเกตได้ในลูปธรรมดา
โอเว่นมีคำตอบที่ดี หากคุณต้องการเพียงกุญแจและคุณกำลังทำงานกับอาร์เรย์สิ่งนี้อาจเป็นประโยชน์
foreach(array_keys($array) as $key) {
// do stuff
}
foreach(array_keys($array) as $index=>$key)
.
คุณสามารถสร้าง$i
นอกวงและทำ$i++
ที่ด้านล่างของวง
ห่วงสองวงนี้เท่ากัน (ป้องกันความปลอดภัยของราง):
for ($i=0; $i<count($things); $i++) { ... }
foreach ($things as $i=>$thing) { ... }
เช่น
for ($i=0; $i<count($things); $i++) {
echo "Thing ".$i." is ".$things[$i];
}
foreach ($things as $i=>$thing) {
echo "Thing ".$i." is ".$thing;
}
ฉันคิดว่าตัวเลือกที่ดีที่สุดเหมือนกัน:
foreach ($lists as $key=>$value) {
echo $key+1;
}
มันง่ายและโดยปกติ
โจนาธานถูกต้อง PHP อาร์เรย์ทำหน้าที่เป็นปุ่มแผนที่การแมปตารางกับค่า ในบางกรณีคุณสามารถรับดัชนีได้หากอาร์เรย์ของคุณถูกกำหนดเช่น
$var = array(2,5);
for ($i = 0; $i < count($var); $i++) {
echo $var[$i]."\n";
}
ผลลัพธ์ของคุณจะเป็น
2
5
ในกรณีที่แต่ละองค์ประกอบในอาร์เรย์มีดัชนีที่รู้จัก แต่ถ้าคุณทำสิ่งต่อไปนี้
$var = array_push($var,10);
for ($i = 0; $i < count($var); $i++) {
echo $var[$i]."\n";
}
คุณไม่ได้รับผลลัพธ์ สิ่งนี้เกิดขึ้นเพราะอาร์เรย์ใน PHP ไม่ได้เป็นโครงสร้างเชิงเส้นเหมือนกับภาษาส่วนใหญ่ พวกเขาเป็นเหมือนตารางแฮชที่อาจมีหรือไม่มีคีย์สำหรับค่าที่เก็บไว้ทั้งหมด ดังนั้น foreach ไม่ได้ใช้ดัชนีในการรวบรวมข้อมูลเพราะพวกเขามีดัชนีเฉพาะเมื่อมีการกำหนดอาร์เรย์ หากคุณจำเป็นต้องมีดัชนีตรวจสอบให้แน่ใจว่าอาร์เรย์ของคุณได้รับการกำหนดอย่างสมบูรณ์ก่อนที่จะรวบรวมข้อมูลและใช้สำหรับลูป
$var[] = 10;
(ดูลิงก์ PHP เพื่อเป็นแนวทาง) ดังนั้นการfor
วนซ้ำครั้งที่สองจะแสดงผลลัพธ์ที่คาดหวัง
PHP อาร์เรย์มีตัวชี้ภายในดังนั้นให้ลองทำดังนี้
foreach($array as $key => $value){
$index = current($array);
}
ทำงานได้ดีสำหรับฉัน (ทดสอบเบื้องต้นเบื้องต้นเท่านั้น)
ปกติฉันจะทำสิ่งนี้เมื่อทำงานกับอาร์เรย์ที่เชื่อมโยง:
foreach ($assoc_array as $key => $value) {
//do something
}
วิธีนี้จะใช้ได้ดีกับอาร์เรย์ที่ไม่เชื่อมโยงด้วย $ key จะเป็นค่าดัชนี หากคุณต้องการคุณสามารถทำได้เช่นกัน:
foreach ($array as $indx => $value) {
//do something
}
ฉันต้องการเพิ่มสิ่งนี้ฉันใช้สิ่งนี้เป็น laravel เพื่อสร้างดัชนีตารางของฉัน:
รหัสของฉัน:
@foreach($resultsPerCountry->first()->studies as $result)
<tr>
<td>{{ ++$loop->index}}</td>
</tr>
@endforeach
$loop
ตัวแปรไม่สามารถนำมาใช้เพราะมันจะถามสำหรับ PHP ทั่วไป
ฉันแก้ไขด้วยวิธีนี้เมื่อฉันต้องใช้ดัชนี foreach และค่าในบริบทเดียวกัน:
$array = array('a', 'b', 'c');
foreach ($array as $letter=>$index) {
echo $letter; //Here $letter content is the actual index
echo $array[$letter]; // echoes the array value
}//foreach
foreach(array_keys($array) as $key) {
// do stuff
}