दिलचस्प रूप से पर्याप्त है, फॉर्च लूप वास्तव में ऐसा करने का सबसे कुशल तरीका है।
चूंकि ओपी ने विशेष रूप से दक्षता के बारे में पूछा था, इसलिए यह ध्यान दिया जाना चाहिए कि सभी वर्तमान उत्तर वास्तव में एक फॉर्च्यूनर की तुलना में बहुत कम कुशल हैं।
मैंने php 5.4 के साथ इस पर एक बेंचमार्क किया था, और रीसेट / कुंजी पॉइंटर विधि (स्वीकृत उत्तर) एक फ़ॉरच की तुलना में लगभग 7 गुना धीमी लगती है। अन्य पूरे सरणी से छेड़छाड़ दृष्टिकोण (array_keys, array_flip) स्पष्ट रूप से भी धीमी है कि तुलना में कर रहे हैं और बन ज्यादा है जब एक बड़ी सरणी के साथ काम करने से भी बदतर।
Foreach बिल्कुल भी अक्षम नहीं है, इसका उपयोग करने के लिए स्वतंत्र महसूस करें!
2015-03-03 संपादित करें:
बेंचमार्क स्क्रिप्ट का अनुरोध किया गया है, मेरे पास मूल नहीं हैं लेकिन इसके बजाय कुछ नए परीक्षण किए हैं। इस बार मैंने फॉर्च्यूनर को केवल दो बार तेजी से रीसेट / कुंजी के रूप में पाया। मैंने 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