While for foreach php

while vs foreach vs for что быстрее в php

Один из самых важных и «узких» моментов, скорость работы массива. По массиву меню в процессе построения функции могут пробегать по многу раз, соответственно крайне важно чтоб этот момент работал на максимуме возможностей. давайте разберёмся всю ли правду пишут нам в интернете, какой массив работает быстрее while vs foreach vs for. Часть тестов не несут осмысленной нагрузки — ради интереса добавлены. Каждый тест перезапускался несколько раз.
Необходимо понимать, что тест имеет перекос в сторону обращения к двумерному массиву.

$a=array( 0=>array(0=>'top') ,1=>array(0=>'top') ,2=>array(0=>'top') ,3=>array(0=>'top') ,4=>array(0=>'top') ,5=>array(0=>'left') ,6=>array(0=>'left') ,7=>array(0=>'left') ,8=>array(0=>'left') ,9=>array(0=>'left') ); в функциях function f1() > 2. foreach($a as $k => $v) < if($v[0]=='right')<>> 3. for($i=0; $i > 4. $c=count($a); for($i=0; $i > 5. $c=count($a)-1; for($i=$c; $i>0; --$i) < if($a[$i][0]=='right')<>> 6. reset($a); while(list($k, $v) = each($a)) < if($v[0]=='right')<>> 7. reset($a); while(list(, $v) = each($a)) < if($v[0]=='right')<>> 8. $i=0; while($i ++$i; > 9. $i=0; $c=count($a); while($i <$c)< if($a[$i][0]=='right')<>++$i; > 10. $i=count($a)-1; while($i>-1) < if($a[$i][0]=='right')<>--$i; > 11. $i=count($a)-1; while($i>=0) < if($a[$i][0]=='right')<>--$i; >

Результаты тестирования скорости массивов в PHP

Компьютер:

Читайте также:  Дано целое число не меньшее 2 выведите его наименьший натуральный делитель отличный от 1 питон
вызовов / функция вpемя быстрее на
1 1 / foreach($a as $v) 0.000018 +0.000006 с. +33.33 %
2 1 / foreach($a as $k => $v) 0.000012 0.000000 с. 0 %
3 1 / for($i=0; $i 0.000036 +0.000024 с. +66.67 %
4 1 / $c=count($a); for($i=0; $i 0.000014 +0.000002 с. +14.29 %
5 1 / $c=count($a)-1; for($i=$c; $i>0; —$i) 0.000022 +0.000010 с. +45.45 %
6 1 / reset($a); while(list($k, $v) = each($a)) 0.000029 +0.000017 с. +58.62 %
7 1 / reset($a); while(list(, $v) = each($a)) 0.000035 +0.000023 с. +65.71 %
8 1 / $i=0; while($i 0.000028 +0.000016 с. +57.14 %
9 1 / $i=0; $c=count($a); while($i<$c) 0.000021 +0.000009 с. +42.86 %
10 1 / $i=count($a)-1; while($i>-1) 0.000013 +0.000001 с. +7.69 %
11 1 / $i=count($a)-1; while($i>=0) 0.000021 +0.000009 с. +42.86 %

Сервер:

вызовов / функция вpемя быстрее на
1 1 / foreach($a as $v) 0.000014 +0.000005 с. +35.71 %
2 1 / foreach($a as $k => $v) 0.000009 0.000000 с. 0 %
3 1 / for($i=0; $i 0.000035 +0.000026 с. +74.29 %
4 1 / $c=count($a); for($i=0; $i 0.000012 +0.000003 с. +25 %
5 1 / $c=count($a)-1; for($i=$c; $i>0; —$i) 0.000020 +0.000011 с. +55 %
6 1 / reset($a); while(list($k, $v) = each($a)) 0.000023 +0.000014 с. +60.87 %
7 1 / reset($a); while(list(, $v) = each($a)) 0.000036 +0.000027 с. +75 %
8 1 / $i=0; while($i 0.000026 +0.000017 с. +65.38 %
9 1 / $i=0; $c=count($a); while($i<$c) 0.000021 +0.000012 с. +57.14 %
10 1 / $i=count($a)-1; while($i>-1) 0.000012 +0.000003 с. +25 %
11 1 / $i=count($a)-1; while($i>=0) 0.000023 +0.000014 с. +60.87 %

В порядке возрастания

Компьютер:

вызовов / функция вpемя быстрее на
2 1 / foreach($a as $k => $v) 0.000012 0.000000 с. 0 %
10 1 / $i=count($a)-1; while($i>-1) 0.000013 +0.000001 с. +7.69 %
4 1 / $c=count($a); for($i=0; $i 0.000014 +0.000002 с. +14.29 %
1 1 / foreach($a as $v) 0.000018 +0.000006 с. +33.33 %
9 1 / $i=0; $c=count($a); while($i<$c) 0.000021 +0.000009 с. +42.86 %
11 1 / $i=count($a)-1; while($i>=0) 0.000021 +0.000009 с. +42.86 %
5 1 / $c=count($a)-1; for($i=$c; $i>0; —$i) 0.000022 +0.000010 с. +45.45 %
8 1 / $i=0; while($i 0.000028 +0.000016 с. +57.14 %
6 1 / reset($a); while(list($k, $v) = each($a)) 0.000029 +0.000017 с. +58.62 %
7 1 / reset($a); while(list(, $v) = each($a)) 0.000035 +0.000023 с. +65.71 %
3 1 / for($i=0; $i 0.000036 +0.000024 с. +66.67 %

Сервер:

вызовов / функция вpемя быстрее на
2 1 / foreach($a as $k => $v) 0.000009 0.000000 с. 0 %
10 1 / $i=count($a)-1; while($i>-1) 0.000012 +0.000003 с. +25 %
4 1 / $c=count($a); for($i=0; $i 0.000012 +0.000003 с. +25 %
1 1 / foreach($a as $v) 0.000014 +0.000005 с. +35.71 %
5 1 / $c=count($a)-1; for($i=$c; $i>0; —$i) 0.000020 +0.000011 с. +55 %
9 1 / $i=0; $c=count($a); while($i<$c) 0.000021 +0.000012 с. +57.14 %
6 1 / reset($a); while(list($k, $v) = each($a)) 0.000023 +0.000014 с. +60.87 %
11 1 / $i=count($a)-1; while($i>=0) 0.000023 +0.000014 с. +60.87 %
8 1 / $i=0; while($i 0.000026 +0.000017 с. +65.38 %
3 1 / for($i=0; $i 0.000035 +0.000026 с. +74.29 %
7 1 / reset($a); while(list(, $v) = each($a)) 0.000036 +0.000027 с. +75 %

Выводы

  • Неожиданно foreach показал хороший результат..
  • Не все циклы в обратном порядке работают быстрей.
  • Count внутри цикла работает медленнее, везде об этом пишут — вычисляется на каждом шагу значение.
  • Любые конструкции где php приходится самому додумывать, обрабатывать пропуски — медленнее, так и здесь while(list(, $v)
  • Больше или равно работает медленнее нежели меньше, поэтому >-1 писать выгоднее нежели >=0 итп.
  • foreach($a as $k=>$v) быстрее чем foreach($a as $v)

Много где пишут, что foreach медленнее остальных циклов, при этом тесты проводят только через foreach($a as $v). Отдельно в следующий раз протестирую что же быстрей for, while на каком-нить синтетическом тесте без обращения к массиву.

Источник

PHP Loops (while, do while, foreach & for) Tutorial

In this tutorial, we learn how to control the flow of our application even further. We learn how PHP can help us iterate through sections of code with while, do-while, for and foreach loop statements.

We also cover so called nested loops, which are loops inside other loops. And finally, we compare each loop and explain when to use which one.

By default, the flow of an application written in PHP is sequential. It starts at the top and flows sequentially to the bottom. Many times we will need to alter this flow and allow specific sections of code to be repeated multiple times.

For this purpose, PHP offers us various types of iteration, or looping, logic which are capable of repeating sections of code. Iteration helps us with repetitive tasks and when dealing with big data.

As an example, let’s consider a database for a mailing list which contains entries for a name and email address.

When we want to send an email to everyone on the list, we will need to iterate through all the users in the database one by one. We then fetch their email address and send them an email.

  The interpreter will start at the first user and send an email to that user. If there are more users in the database, it will process the next user in the database and send them an email too.

This process loops over and over for all the users in the database, or until we tell it to stop.

PHP offers us four types of loop statements:

A while loop will tell the interpreter to execute its code block repeatedly, as long as the while expression remains true. The expression will be evaluated each time at the beginning of the loop’s iteration.

The basic form of a while loop is as follows.

Источник

Использование циклов в PHP

PHP имеет четыре вида циклов и операторы управления ими, рассмотрим поподробнее.

Foreach – перебор массива

Предназначен для перебора элементов массива.

Foreach – перебор массива

$array = array( 1 => 'Значение 1', 2 => 'Значение 2', 3 => 'Значение 3', 4 => 'Значение 4', ); // Вывод ключей foreach ($array as $key => $val) < echo $key . '
'; > // Вывод значений foreach ($array as $key => $val) < echo $val . '
'; >

Результат:

1 2 3 4 Значение 1 Значение 2 Значение 3 Значение 4

Альтернативный синтаксис foreach

For – цикл с счетчиком

Цикл работает пока выполняется заданное условие. Обычно применяется в качестве счетчика.

For – цикл с счетчиком

// Счетчик от 0 до 5 for ($n = 0; $n // Счетчик от 5 до 0 for ($n = 5; $n >= 0; $n--)

Результат:

Альтернативный синтаксис

$array = array( 'Значение 1', 'Значение 2', 'Значение 3', 'Значение 4', ); for ($n = 0; $n < count($array); $n++) < echo $array[$n] . '
'; >

Результат:

Значение 1 Значение 2 Значение 3 Значение 4

Альтернативный синтаксис for

While – цикл с предусловием

Т.е. если перед началом итерации условие выполняется, то цикл продолжает свою работу.

While – цикл с предусловием

Результат:

Альтернативный синтаксис while

Do-while – цикл с постусловием

В отличии от while этот цикл проверяет выполнения условия после каждой итерации. Do-while не имеет альтернативного синтаксиса.

Do-while – цикл с постусловием

Результат:

Управление циклами

Break

Вызов break или break 1 в цикле останавливает его.

Для вложенных циклов используется break 2 и т.д.

Continue

Используется для пропуска итерации.

Результат:

Для вложенных циклов по аналогии с break 2 , break 3 – continue 2 , continue 3 .

Источник

PHP — Операторы циклов

for — перебирает через цикл блок кода определенное количество раз.

while – перебирает через цикл блок кода, если и до тех пор, пока указанное условие является истинным.

do … while — перебирает через цикл блок кода, а затем повторяет цикл, пока выполняется специальное условие.

Онлайн курс «PHP-разработчик»

Изучите курс и создайте полноценный проект — облачное хранилище файлов

С нуля освоите язык программирования PHP, структурируете имеющиеся знания, а эксперты помогут разобраться с трудными для понимания темами, попрактикуетесь на реальных задачах. Напишете первый проект для портфолио.

foreach – перебирает через цикл каждый элемент в массиве.

Ниже рассмотрим ключевые слова continue и break, которые используются для выполнения циклов.

Оператор цикла for

Оператор for используется, когда вы знаете, сколько раз вам нужно выполнить оператор или блок операторов.

PHP — Операторы циклов

Синтаксис

Для установки начального значения счетчика используется инициализатор. Для этой цели может быть объявлена переменная, ее традиционно называют $i.

В следующем примере выполняется пять итераций и при каждом выполнении цикла изменяется назначенное значение двух переменных:

Этот код дает следующий результат: At the end of the loop a = 50 and b = 25

Оператор цикла while

Оператор while выполняет блок кода, если и до тех пор, пока условное выражение истинно. Если условное выражение истинно, тогда будет выполняться блок кода. После выполнения кода условное выражение снова будет оценено, и цикл будет продолжаться до тех пор, пока условное выражение не окажется ложным.

PHP — Операторы циклов

Синтаксис

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

Этот код дает следующий результат: Loop stopped at i = 10 and num = 40

Оператор do … while

Оператор do … while выполняет блок кода хотя бы один раз — он повторяет цикл, пока условие выполняется.

Синтаксис

В следующем примере значение i увеличивается, по крайней мере, один раз и значение переменной i будет увеличиваться до тех пор, пока не достигнет 10:

Этот код дает следующий результат — Loop stopped at i = 10

Оператор цикла foreach

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

Синтаксис

В следующем примере выводятся значения массива.

Этот код дает следующий результат:

Оператор break

Ключевое слово PHP break используется для преждевременного прекращения выполнения цикла. Оператор break находится внутри блока операторов. Он предоставляет вам полный контроль, вы можете остановить цикл, когда вам нужно. После выхода из цикла будет выполняться следующее после цикла действие.

PHP — Операторы циклов

В следующем примере условие test становится истинным, когда значение счетчика достигает 3 и цикл завершается.

Этот код дает следующий результат: Loop stopped at i = 3

Оператор continue

Ключевое слово PHP continue используется для остановки текущей итерации цикла, но оно не завершает цикл. Как и оператор break, оператор continue находится внутри блока операторов, содержащих код, который выполняется циклом. Если при проходе кода, встречается оператор continue , остальная часть кода цикла пропускается, и начинается следующий проход цикла.

PHP — Операторы циклов

В следующем примере цикл выведет значение массива, но в случае если условие истинно он пропускает код и выводит следующее значение.

Источник

Оцените статью