İlginçtir ki, foreach döngüsü bunu yapmanın en etkili yoludur.
OP özellikle verimlilik hakkında sorduğundan, mevcut tüm cevapların aslında bir foreach'tan çok daha az verimli olduğuna dikkat edilmelidir.
Ben php 5.4 ile bu konuda bir kriter yaptım ve sıfırlama / anahtar işaretçi yöntemi (kabul edilen cevap) bir foreach yaklaşık 7 kat daha yavaş görünüyor. Tüm diziyi (dizi_anahtarları, dizi_flip) manipüle eden diğer yaklaşımlar bundan daha yavaştır ve büyük bir dizi ile çalışırken çok daha kötü hale gelir .
Foreach hiç verimsiz değil, kullanmaktan çekinmeyin!
2015-03-03 Düzenle:
Karşılaştırma komut dosyaları istendi, orijinal olanlarım yok, bunun yerine yeni testler yaptım. Bu kez foreach'ı reset / key'den sadece iki kat daha hızlı buldum. 100 tuşlu bir dizi kullandım ve fark edilir bir fark elde etmek için her yöntemi milyon kez çalıştırdım, işte basit karşılaştırmanın kodu:
$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 />";
Benim php 5.5 bu çıktılar:
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
sıfırla + anahtar http://3v4l.org/b4DrN/perf#tabs
foreach http://3v4l.org/gRoGD/perf#tabs