Цікаво, що цикл foreach - це насправді найефективніший спосіб зробити це.
Оскільки ОП спеціально запитала про ефективність, слід зазначити, що всі поточні відповіді насправді набагато менш ефективні, ніж передбачення.
Я зробив орієнтир щодо цього за допомогою php 5.4, і метод скидання / вказівника клавіш (прийнята відповідь), здається, приблизно в 7 разів повільніше, ніж foreach. Інші підходи, що маніпулюють усім масивом (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