Interessanterweise ist die foreach-Schleife der effizienteste Weg, dies zu tun.
Da das OP speziell nach Effizienz gefragt hat, sollte darauf hingewiesen werden, dass alle aktuellen Antworten tatsächlich viel weniger effizient sind als ein Foreach.
Ich habe diesbezüglich einen Benchmark mit PHP 5.4 durchgeführt, und die Reset / Key Pointer-Methode (akzeptierte Antwort) scheint etwa siebenmal langsamer zu sein als eine foreach. Andere Ansätze zur Manipulation des gesamten Arrays (array_keys, array_flip) sind offensichtlich noch langsamer und werden bei der Arbeit mit einem großen Array viel schlimmer.
Foreach ist überhaupt nicht ineffizient, verwenden Sie es einfach!
Bearbeiten 03.03.2015:
Es wurden Benchmark-Skripte angefordert, ich habe nicht die ursprünglichen, sondern stattdessen einige neue Tests durchgeführt. Diesmal fand ich den foreach nur etwa doppelt so schnell wie reset / key. Ich habe ein Array mit 100 Schlüsseln verwendet und jede Methode millionenfach ausgeführt, um einen spürbaren Unterschied zu erzielen. Hier ist der Code des einfachen Benchmarks:
$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 />";
Auf meinem PHP 5.5 gibt dies aus:
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
Zurücksetzen + Schlüssel http://3v4l.org/b4DrN/perf#tabs
foreach http://3v4l.org/gRoGD/perf#tabs