Какой из них будет лучше для производительности и удобочитаемости?
foreach(range(0,10000) as $i) {} // 3.847 ms for($i = 0; $i < 10000; ++$i) {} // 0.663 ms
Изменить : Был ли тест и последний был почти в 6 раз быстрее.
Традиционная 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 раз, если вы уменьшаете количество итераций, разница меньше).
Если это так важно,
for($i = 0; $i < 1000; ++$i) {}
быстрее, чем
for($i = 0; $i < 1000; $i++) {}
но вы не заметите большой разницы всего за 1000 итераций
Действительно ли это так важно для микро-оптимизации … и если да, почему бы вам просто не настроить некоторые тестовые прогоны, чтобы сравнить различные варианты самостоятельно
Foreach отлично подходит для повторения массивов с использованием ключей и значений.
Например, если у меня был массив с именем «Пользователь»:
$User = array( 'name' => 'Bob', 'email' => 'bob@example.com', 'age' => 200 );
Я мог легко и быстро прокручивать и использовать ключи:
foreach ($User as $key => $value) { echo $key.' is '.$value.'<br />'; }
Это напечатает:
name is Bob email is bob@example.com age is 200
Для циклов с петлями сложнее сохранить ключи.
Когда вы используете объектно-ориентированную практику в PHP, вы обнаружите, что вы будете использовать foreach почти целиком, for циклов только для численных или списковых вещей. foreach также не позволяет вам использовать count($array) чтобы найти общее количество элементов в массиве.
Foreach отлично подходит для повторения массивов с использованием ключей и значений. Для циклов с петлями сложнее сохранить ключи. http://www.c-sharpcorner.com/interviews/answer/2147/ это может быть полезно
В этом конкретном случае (с range() а не с массивом, переданным из другой области) – foreach() будет быстрее. for() будет бить его практически в любом другом случае.
сравнение скорости выполнения некоторых php-функций
для цикла
for() using count() занимает 20.86401 мс
for() Без Not using count() 7.09796 мс
используя count () означает: for ($i = 1; $i < count($myarr); ++ $i) { ..
где как foreach () loop:
foreach() занял 11.16920 мс
foreach() с KEY занял 12.35318 мс
они оба выполняются на одном массиве, и их соответствующее время выполнения показано как for foreach так и foreach – это языковые конструкции, и их скорость выполнения будет больше, поэтому вы не можете заметить гораздо больше различий, если не используете их в массиве с тысячами записей.