it-swarm.com.ru

PHP для цикла против foreach с диапазоном

Что из этого будет лучше для производительности и читабельности? 

foreach(range(0,10000) as $i) {} // 3.847 ms

for($i = 0; $i < 10000; ++$i) {} // 0.663 ms

Правка : Сделал тест, и последний был почти в 6 раз быстрее.

12
Emil Aspman

Традиционный цикл for работает быстрее, чем foreach + range. Первый использует только целочисленное сравнение и увеличение, в то время как последний должен создать (возможно большой) массив, а затем извлечь каждый элемент, перемещая внутренний курсор массива и проверяя, достигнут ли конец.

Если вы выполните это, вы увидите, что обычный for в два раза быстрее, чем foreach + range:

$t0 = microtime(true);
for ($i = 0; $i < 100000; $i++) {
}
echo 'for loop: ' . (microtime(true) - $t0) . ' s', PHP_EOL;

$t0 = microtime(true);
foreach (range(0, 100000) as $i) {
}
echo 'foreach + range loop: ' . (microtime(true) - $t0) . ' s', PHP_EOL;

Лучше использовать традиционную for в качестве привычки в том случае, если вам нужно выполнить итерацию заданное количество раз, но в конце дня вы не увидите больших улучшений производительности в большинстве сценариев (примите во внимание, что в приведенном выше примере повторяется 100k раз, если вы уменьшите количество итераций, разница будет меньше).

10
Carlos

Если это так важно,

for($i = 0; $i < 1000; ++$i) {}

быстрее чем

for($i = 0; $i < 1000; $i++) {}

но вы не заметите большой разницы всего за 1000 итераций

Действительно ли так важно микрооптимизировать .... и если да, то почему вы не можете просто настроить несколько тестовых прогонов, чтобы сравнить различные варианты самостоятельно?

6
Mark Baker

В этом конкретном случае (с range(), а не с массивом, переданным из другой области видимости) - foreach() будет работать быстрее .for() превзойдет его практически в любом другом случае.

0
Narf

Foreach отлично подходит для перебора массивов, в которых используются ключи и значения . С помощью циклов for труднее сохранить использование ключей . http://www.c-sharpcorner.com/interviews/ ответ/2147/ это может быть полезно

0
rOcKiNg RhO

Foreach отлично подходит для перебора массивов, использующих ключи и значения.

Например, если у меня был массив с именем «Пользователь»:

$User = array(
    'name' => 'Bob',
    'email' => '[email protected]',
    'age' => 200
);

Я мог бы пройти через это очень легко и по-прежнему использовать ключи:

foreach ($User as $key => $value) {
    echo $key.' is '.$value.'<br />';
}

Это распечатало бы:

name is Bob
email is [email protected]
age is 200

С циклами for более сложно сохранить использование ключей.

Когда вы используете объектно-ориентированную практику в PHP, вы обнаружите, что вы будете использовать foreach почти полностью, с циклами for только для числовых или основанных на списке вещей. foreach также не позволяет вам использовать count($array), чтобы найти общее количество элементов в массиве.

0
echo_Me

сравнение скорости выполнения некоторых функций PHP  

для цикла взял

for() loop using count() заняло 20,86401 мс 

for() loop Not using count() заняло 7,09796 мс

использование count () означает: for ($i = 1; $i < count($myarr); ++ $i) { ..

где цикл foreach ():

foreach() заняло 11.16920 мс

foreach() с KEY заняло 12,35318 мс

они оба выполняются в одном и том же массиве, и их соответствующее время выполнения показано, что и for, и foreach являются языковыми конструкциями, и скорость их выполнения будет больше, поэтому вы не сможете заметить гораздо больше различий, если не будете использовать их в массиве с тысячами записей.

0
Sivagopal Manpragada