আকর্ষণীয়ভাবে যথেষ্ট, ফোরচ লুপটি আসলে এটি করার সবচেয়ে কার্যকরী উপায়।
যেহেতু ওপি বিশেষত দক্ষতার বিষয়ে জিজ্ঞাসা করেছিল, তাই এটি উল্লেখ করা উচিত যে সমস্ত বর্তমান উত্তরগুলি প্রকৃতপক্ষে কোনও ভবিষ্যতের তুলনায় অনেক কম দক্ষ।
আমি পিএইচপি 5.4 এর সাথে এটিতে একটি বেঞ্চমার্ক করেছি এবং রিসেট / কী পয়েন্টার পদ্ধতি (স্বীকৃত উত্তর) একটি ভবিষ্যদ্বাণী থেকে প্রায় 7 গুণ ধীর বলে মনে হচ্ছে। অন্যান্য সমগ্র অ্যারের সাধিত পন্থা (array_keys, array_flip) স্পষ্টত এমনকি ধীর যে এর চেয়ে এবং পরিণত অনেক যখন বৃহৎ অ্যারের সাথে কাজ খারাপ।
ফরচ মোটেও অদক্ষ নয়, এটি নিখরচায় ব্যবহার করুন!
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 />";
আমার পিএইচপি 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
রিসেট + Key http://3v4l.org/b4DrN/perf#tabs
foreach http://3v4l.org/gRoGD/perf#tabs