ที่น่าสนใจคือการวนรอบ foreach เป็นวิธีที่มีประสิทธิภาพที่สุดในการทำสิ่งนี้
เนื่องจาก OP ได้ถามถึงประสิทธิภาพโดยเฉพาะจึงควรชี้ให้เห็นว่าคำตอบในปัจจุบันทั้งหมดนั้นมีประสิทธิภาพน้อยกว่า foreach มาก
ฉันทำเกณฑ์มาตรฐานนี้ด้วย php 5.4 และวิธีการรีเซ็ต / คีย์ตัวชี้ (คำตอบที่ยอมรับได้) ดูเหมือนว่าจะช้ากว่า foreach ประมาณ 7 เท่า วิธีอื่น ๆ ในการจัดการกับอาเรย์ทั้งหมด (array_keys, array_flip) เห็นได้ชัดว่าช้าลงกว่านั้นและแย่ลงมากเมื่อทำงานกับอาเรย์ขนาดใหญ่
Foreach นั้นไม่มีประสิทธิภาพเลยรู้สึกอิสระที่จะใช้มัน!
แก้ไข 2015-03-03:
มีการร้องขอสคริปต์การวัดประสิทธิภาพฉันไม่มีแบบดั้งเดิม แต่ได้ทำการทดสอบใหม่แทน เวลานี้ฉันพบ foreach เพียงสองครั้งเร็วพอรีเซ็ต / คีย์ ฉันใช้อาร์เรย์ 100 คีย์และวิ่งแต่ละวิธีเป็นล้านครั้งเพื่อให้ได้ความแตกต่างที่สังเกตเห็นได้นี่คือโค้ดของเกณฑ์มาตรฐานอย่างง่าย:
$array = [];
for($i=0; $i < 100; $i++)
$array["key$i"] = $i;
for($i=0, $start = microtime(true); $i < 1000000; $i++) {
foreach ($array as $firstKey => $firstValue) {
break;
}
}
echo "foreach to get first key and value: " . (microtime(true) - $start) . " seconds <br />";
for($i=0, $start = microtime(true); $i < 1000000; $i++) {
$firstValue = reset($array);
$firstKey = key($array);
}
echo "reset+key to get first key and value: " . (microtime(true) - $start) . " seconds <br />";
for($i=0, $start = microtime(true); $i < 1000000; $i++) {
reset($array);
$firstKey = key($array);
}
echo "reset+key to get first key: " . (microtime(true) - $start) . " seconds <br />";
for($i=0, $start = microtime(true); $i < 1000000; $i++) {
$firstKey = array_keys($array)[0];
}
echo "array_keys to get first key: " . (microtime(true) - $start) . " seconds <br />";
ใน php 5.5 ของฉันผลลัพธ์นี้:
foreach to get first key and value: 0.15501809120178 seconds
reset+key to get first key and value: 0.29375791549683 seconds
reset+key to get first key: 0.26421809196472 seconds
array_keys to get first key: 10.059751987457 seconds
รีเซ็ต + คีย์http://3v4l.org/b4DrN/perf#tabs
foreach http://3v4l.org/gRoGD/perf#tabs