Thật thú vị, vòng lặp foreach thực sự là cách hiệu quả nhất để làm điều này.
Vì OP đặc biệt hỏi về hiệu quả, nên cần chỉ ra rằng tất cả các câu trả lời hiện tại trên thực tế kém hiệu quả hơn nhiều so với một bài giảng.
Tôi đã thực hiện một điểm chuẩn về điều này với php 5.4 và phương thức thiết lập lại con trỏ / phím (câu trả lời được chấp nhận) dường như chậm hơn khoảng 7 lần so với một bài giảng. Các cách tiếp cận khác thao túng toàn bộ mảng (Array_keys, Array_flip) rõ ràng thậm chí còn chậm hơn thế và trở nên tồi tệ hơn nhiều khi làm việc với một mảng lớn.
Foreach không hiệu quả chút nào, hãy sử dụng nó!
Chỉnh sửa 2015/03/03:
Các kịch bản điểm chuẩn đã được yêu cầu, tôi không có các kịch bản gốc nhưng thay vào đó đã thực hiện một số thử nghiệm mới. Lần này tôi thấy foreach chỉ nhanh gấp đôi tốc độ reset / key. Tôi đã sử dụng một mảng 100 khóa và chạy mỗi phương thức một triệu lần để có một số khác biệt đáng chú ý, đây là mã của điểm chuẩn đơn giản:
$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 />";
Trên php 5.5 của tôi, kết quả này:
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
đặt lại + khóa http://3v4l.org/b4DrN/perf#tabs
foreach http://3v4l.org/gRoGD/perf#tabs