Interessanterweise ist die foreach-Schleife die effizienteste Art, dies zu tun.
Da der Auftraggeber speziell nach der Effizienz gefragt hat, sollte darauf hingewiesen werden, dass alle derzeitigen Antworten in der Tat viel weniger effizient sind als ein foreach.
Ich habe einen Benchmark mit php 5.4 durchgeführt, und die reset/key pointer-Methode (akzeptierte Antwort) scheint etwa 7 mal langsamer zu sein als ein foreach. Andere Ansätze, die das gesamte Array manipulieren (array_keys, array_flip) sind offensichtlich noch langsamer als das und werden viel schlechter, wenn man mit einem großen Array arbeitet.
Foreach ist keineswegs ineffizient, nutzen Sie es ruhig!
Edit 2015-03-03:
Benchmark-Skripte wurden angefordert, ich habe die Original-Skripte nicht mehr und habe stattdessen einige neue Tests gemacht. Dieses Mal fand ich foreach nur etwa doppelt so schnell wie reset/key. Ich habe ein Array mit 100 Schlüsseln verwendet und jede Methode eine Million Mal durchlaufen lassen, um einen merklichen Unterschied zu erhalten, 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 wird dies ausgegeben:
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
Reset+Taste http://3v4l.org/b4DrN/perf#tabs
foreach http://3v4l.org/gRoGD/perf#tabs