興味深いことに、実際にはforeachループが最も効率的な方法です。
OPは効率について具体的に尋ねたため、現在のすべての回答は、実際にはforeachよりもはるかに効率が悪いことを指摘しておく必要があります。
私はこれをphp 5.4でベンチマークしました。リセット/キーポインターメソッド(受け入れられた回答)は、foreachよりも約7倍遅いようです。配列全体(array_keys、array_flip)を操作する他のアプローチはさらに遅いよりも明らかにされているとなる非常に大きな配列を扱う場合に悪化。
Foreachは非効率的ではありません。お気軽にご利用ください!
2015-03-03を編集:
ベンチマークスクリプトがリクエストされました。元のスクリプトはありませんが、代わりにいくつかの新しいテストを行いました。今回は、リセット/キーの約2倍の速さでforeachが見つかりました。私は100キーの配列を使用し、各メソッドを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
reset + key http://3v4l.org/b4DrN/perf#tabs
foreach http://3v4l.org/gRoGD/perf#tabs