Люди должны прекратить расставлять приоритеты, ставя под сомнение мотив ОП.
Я провел простой микротайм-тест и почти не заметил заметной разницы во времени выполнения.
Способ - создание тест-массива:
$arr = array();
for($i = 0; $i<10000; $i++){
$arr[] = mt_rand(0, PHP_INT_MAX);
//NOTE: I also tested setting values in random keys, no measurable difference
}
Затем используйте этот массив для тестирования:
//Method 1
$start = microtime(true);
foreach(array_keys($arr) as $k){
$arr[$k] = 0; //Do something
}
$end = microtime(true);
echo 'we spent '.($end - $start).' seconds doing this.';
Вот код для тестирования другого метода (запускался отдельно или результаты менялись еще больше)
//Method 2
$start = microtime(true);
foreach($arr as $k => $v){
$arr[$k] = 0; //Do something
}
$end = microtime(true);
echo 'we spent '.($end - $start).' seconds doing this.';
Мое время было около 2 миллисекунд для обоих. Я полагаю, что моя система недостаточно стабильна для последовательных измерений микросекунд.
Я не мог определить, был ли один быстрее другого.
Я также протестировал выполнение каждого foreach 1000 раз с меньшим массивом для измерения самого метода, но я только что получил тот же результат за 2 миллисекунды.
Так что это значит?
Основываясь на этих простых тестах, выбор метода не имеет смысла в отношении производительности.
Возможно, вы можете измерить крошечное улучшение одним методом по сравнению с другим, если вы используете чрезвычайно большие массивы в чрезвычайно стабильных системах или выполняете очень много циклов foreach в одну сторону в другую.