흥미롭게도 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