Intereting Posts

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

Какой из них будет лучше для производительности и удобочитаемости?

foreach(range(0,10000) as $i) {} // 3.847 ms for($i = 0; $i < 10000; ++$i) {} // 0.663 ms 

Изменить : Был ли тест и последний был почти в 6 раз быстрее.

Solutions Collecting From Web of "PHP для цикла против foreach с диапазоном"

Традиционная 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 – это языковые конструкции, и их скорость выполнения будет больше, поэтому вы не можете заметить гораздо больше различий, если не используете их в массиве с тысячами записей.