Тарифы Услуги Сим-карты

Циклы for while в php. Операторы continue и break. Использование continue в цикле for

Последнее обновление: 1.11.2015

Для совершения повторяемых действий в PHP, как и в других языках программирования, используются циклы. В PHP имеются следующие виды циклов:

Цикл for

Цикл for имеет следующее формальное определение:

For ([инициализация счетчика]; [условие]; [изменение счетчика]) { // действия }

Рассмотрим стандартный цикл for:

"; } ?>

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

Вторая часть - условие, при котором будет выполняться цикл. В данном случае цикл будет выполняться, пока $i не достигнет 10.

Третья часть - приращение счетчика на единицу. Опять же нам необязательно увеличивать на единицу. Можно уменьшать: $i--.

В итоге блок цикла сработает 9 раз, пока значение $i не станет равным 10. И каждый раз это значение будет увеличиваться на 1. Каждое отдельное повторение цикла называется итерацией. Таким образом, в данном случае произойдет 9 итераций.

Цикл while

Цикл while проверяет истинность некоторого условия, и если условие истинно, то выполняются блок выражений цикла:

"; $counter++; } ?>

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

"; ?>

Цикл do..while

Цикл do..while похож на цикл while , только теперь выполняется блок цикла, и только потом выполняется проверка условия. То есть даже если условие ложно, то блок цикла выполнится как минимум один раз:

"; $counter++; } while($counter<10) ?>

Операторы continue и break

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

80) { break; } echo "Квадрат числа $i равен $result
"; } ?>

И если вдруг результат операции окажется больше 80, то происходит выход из цикла.

Для управления циклами также применяется оператор continue . Он осуществляет переход к следующей итерации цикла:

"; } ?>

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

9 years ago

Just a note about using the continue statement to forego the remainder of a loop - be SURE you"re not issuing the continue statement from within a SWITCH case - doing so will not continue the while loop, but rather the switch statement itself.

While that may seem obvious to some, it took a little bit of testing for me, so hopefully this helps someone else.

1 year ago

$i = - 1 ;
while ($i ) {
echo $i ++;
}
?>
outputs "-1" then stops because "0" (zero) gets evaluated as FALSE.

this demonstrates why it"s important for a PDO statement fetch-ing a column value inside a while-loop to test explicitly for FALSE.

4 years ago

Is strange that the manual states...
"Sometimes, if the while expression evaluates to FALSE from the very beginning, the nested statement(s) won"t even be run once. "

Because it can"t be SOMETIMES

If it behaves that way, then it is a bug, because it ALWAYS must not run the nested statement(s) even once if the WHILE expression evaluates to FALSE from the very beginning.

Another way to exit the while loop is by using the BREAK statement.. see it in the manual.

And if expression evaluates to NULL is the same as FALSE
while (expression evals to NULL){ }

17 years ago

At the end of the while (list / each) loop the array pointer will be at the end.
This means the second while loop on that array will be skipped!

You can put the array pointer back with the reset($myArray) function.

$myArray =array("aa" , "bb" , "cc" , "dd" );
reset ($myArray );
while (list ($key , $val ) = each ($myArray )) echo $val ;
?>

3 years ago

Simple pyramid pattern program using while loop
$i = 1 ;
while($i <= 5 )
{
$j = 1 ;
while($j <= $i )
{
echo "*  " ;
$j ++;
}
echo "
" ;
$i ++;
}
?>
// or alternatively you can use:
$i = 1 ;
while($i <= 5 ):

$j = 1 ;
while($j <= $i ):
echo "*  " ;
$j ++;
endwhile;

Echo "
" ;
$i ++;
endwhile;
?>

6 years ago

Instead of this usage;

$arr = array("orange" , "banana" , "apple" , "raspberry" );

$i = 0 ;
while ($i < count ($arr )) {
$a = $arr [ $i ];
echo $a . "\n" ;
$i ++;
}
// or
$i = 0 ;
$c = count ($arr );
while ($i < $c ) {
$a = $arr [ $i ];
echo $a . "\n" ;
$i ++;
}
?>

This could be more efficient;

while ($a = $arr [ 1 * $i ++]) echo $a . "\n" ;
?>

13 years ago

Just a note to stuart - the reason for this behaviour is because using the while(value = each(array)) construct increments the internal counter of the array as its looped through. Therefore if you intend to repeat the loop, you need to reset the counter. eg:

$one = array("10", "20", "30", "40");
$two = array("a", "b", "c", "d");

$i=0;
while($i < count($one)) {
reset($two);
while($a = each($two)) {
echo $a." - ".$one[$i].", ";
}
$i++;

a - 10, b - 10, c - 10, d - 10, a - 20, b - 20, c - 20, d - 20, a - 30, b - 30, c - 30, d - 30, a - 40, b - 40, c - 40, d - 40,

14 years ago

While can do wonders if you need something to queue writing to a file while something else has access to it.

Here is my simple example:

Function write ($data , $file , $write_mode = "w" ) {
$lock = $file . ".lock" ;
// run the write fix, to stop any clashes that may occur
write_fix ($lock );
// create a new lock file after write_fix() for this writing session
touch ($lock );
// write to your file
$open = fopen ($file , $write_mode );
fwrite ($open , $data );
fclose ($open );
// kill your current lock
unlink ($lock );
}

Function write_fix ($lock_file ) {
while(file_exists ($lock_file ){
// do something in here?
// maybe sleep for a few microseconds
// to maintain stability, if this is going to
// take a while ??
}
}

?>

This method is not recommended for use with programs that will be needing a good few seconds to write to a file, as the while function will eat up alot of process cycles. However, this method does work, and is easy to implement. It also groups the writing functions into one easy to use function, making life easier. :-)

3 years ago

A cool way to keep evaluating something until it fails a test.

while (true ) {
if ("test" ) { // is initial condition true
// do something that also changes initial condition
} else { // condition failed
break; // leave loop
}
}
?>

2 years ago

// test While Vs For php 5.6.17

$t1 = microtime (true );
$a = 0 ;
while($a ++ <= 1000000000 );
$t2 = microtime (true );
$x1 = $t2 - $t1 ;
echo PHP_EOL , " > while($a++ <= 100000000); : " , $x1 , "s" , PHP_EOL ;

$t3 = microtime (true );
for($a = 0 ; $a <= 1000000000 ; $a ++);
$t4 = microtime (true );
$x2 = $t4 - $t3 ;
echo PHP_EOL , "> for($a=0;$a <= 100000000;$a++); : " , $x2 , "s" , PHP_EOL ;

$t5 = microtime (true );
$a = 0 ; for(; $a ++ <= 1000000000 ;);
$t6 = microtime (true );
$x3 = $t6 - $t5 ;
echo PHP_EOL , " > $a=0; for(;$a++ <= 100000000;); : " , $x3 , "s" , PHP_EOL ;

//> while($a++ <= 100000000); = 18.509671926498s
//> for($a=0;$a <= 100000000;$a++); = 25.450572013855s
//> $a=0; for(;$a++ <= 100000000;); = 22.614907979965s

// ===================

//> while($a++ != 100000000); : 18.204656839371s
//> for($a=0;$a != 100000000;$a++); : 25.025605201721s
//> $a=0; for(;$a++ != 100000000;); : 22.340576887131s

// ===================

//> while($a++ < 100000000); : 18.383454084396s
//> for($a=0;$a < 100000000;$a++); : 25.290743112564s
//> $a=0; for(;$a++ < 100000000;); : 23.28609919548s

?>

15 years ago

I made a test traversing an array (simple, but long, numeric array with numeric keys). My test had a cycle per method, and multiplied each array element by 100.. These were my results:

******************************************************
30870 Element Array Traversing


0.2373 seg later -> while (list ($key, $val) = each ($array)) ENDS


0.1916 seg later -> while (list ($key,) = each ($array)) ENDS


0.1714 seg later -> foreach ($array AS $key=>$value) ENDS


0.0255 seg later -> while ($next = next($array)) ENDS


0.1735 seg later -> foreach ($array AS $value) ENDS
**************************************************************

foreach is fatser than a while (list - each), true.
However, a while(next) was faster than foreach.

These were the winning codes:

$array = $save;
test_time("",1);
foreach ($array AS $key=>$value)
test_time("foreach (\$array AS \$key=>\$value)");

$array = $save;
test_time("",1);
reset($array);
while ($next = next($array))
{ $key = key($array);
$array[$key] = $array[$key] * 100;
}
test_time("while (\$next = next(\$array))");
*********************************************************
The improvement seems huge, but it isnt that dramatic in real practice. Results varied... I have a very long bidimensional array, and saw no more than a 2 sec diference, but on 140+ second scripts. Notice though that you lose control of the $key value (unless you have numeric keys, which I tend to avoid), but it is not always necessary.

I generally stick to foreach. However, this time, I was getting Allowed Memory Size Exceeded errors with Apache. Remember foreach copies the original array, so this now makes two huge 2D arrays in memory and alot of work for Apache. If you are getting this error, check your loops. Dont use the whole array on a foreach. Instead get the keys and acces the cells directlly. Also, try and use unset and Referencing on the huge arrays.

Working on your array and loops is a much better workaround than saving to temporary tables and unsetting (much slower).

10 years ago

Due to the fact that php only interprets the necessary elements to get a result, I found it convenient to concatenate different sql queries into one statement:

$q1 = "some query on a set of tables" ;
$q2 = "similar query on a another set of tables" ;

if (($r1 = mysql_query ($q1 )) && ($r2 = mysql_query ($q2 ))) {

While (($row = mysql_fetch_assoc ($r1 ))||($row = mysql_fetch_assoc ($r2 ))) {

/* do something with $row coming from $r1 and $r2 */

}
}

?>

14 years ago

The speedtest is interesting. But the seemingly fastest way contains a pitfall for beginners who just use it because it is fast and fast is cool ;)

Walking through an array with next() will cut of the first entry, as this is the way next() works ;)

If you really need to do it this way, make sure your array contains an empty entry at the beginning. Another way would be to use

while ($this = current ($array )){
do_something ($this );
next ($array );
}
?>

There is an impact on speed for sure but I did not test it. I would advise to stick with conventional methods because current(),next() in while loops is too error prone for me.

Очень часто при написании скриптов требуется выполнить одно и тоже действие несколько раз. Для этого и нужны циклы. Циклы в php , как и в других языках, делятся на несколько типов:

  1. Цикл со счетчиком for
  2. Цикл с условием while, do-while
  3. Цикл для обхода массивов foreach

Например, при создании интернет магазина , нам нужно до вывода товаров на экран, убрать товары, остаток на складе которых ниже 10. Для этого мы в цикле обходим массив с товарами, и при помощи условного оператора if, сверяем кол-во товаров на складе, и убираем из массива все товары, у которых значение на складе меньше 10.

Цикл For в PHP

Цикл со счетчиком for - выполняется определенное количество раз. Рассмотрим пример:

"; } ?>

В этом примере цикл будет выполняться 11 раз. От 0 (т.к. переменная $i = 0) до 10 (т.к. $i <= 10). Каждую итерацию $i будет увеличено на 1 ($i++). Чтобы было понятней, сделаем еще один пример:

"; } ?>

Цикл будет выполняться от 5 и до 9 ($i < 10 (в предыдущем примере было <= 10)).

Так же цикл можно выполнять в обратном порядке:

5; $i--) { echo "Номер итерации: $i
"; } ?>

Цикл будет выполнен от 10 и до 5.

Так же цикл можно выполнять с определенным шагом, рассмотрим пример:

"; } ?>

В цикле будет выполнено 3 итерации (0, 5, 10) с шагом 5. Каждую итерацию, счетчик цикла будет увеличен на 5.

Цикл foreach в PHP

Цикл foreach - самый распространенный цикл. Требуется почти во всех скриптах, особенно если php скрипт работает с базами данных. Используется для обхода массивов.

Например, рассмотрим небольшой пример:

$value) { echo "Ключ: $key, Значение: $value
"; } ?>

Запустив скрипт вы увидете:

Ключ: 0, Значение: red Ключ: 1, Значение: blue Ключ: 2, Значение: green Ключ: color, Значение: yellow Ключ: test, Значение: дизайн студия ox2.ru

Цикл while в PHP

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

Рассмотрим пример:

"; } ?>

На экране увидим числа от 1 до 19

Цикл do-while в PHP:

Цикл do-while - работает точно так же как и цикл while , единственное отличие что условие выполняется после итерации. Напишем пример:

"; } while ($i < 20); //Выполняем цикл до те пор, пока $i < 20 ?>

На экране увидим числа от 1 до 20. Обратите внимание, что в предыдущем примере с циклом while было от 1 до 19, т.к. условие выполнялось до итерации цикла.

Для того чтобы прервать цикл существует функция break , она позволяет выйти из цикла , не зависимо от того сколько итераций осталось до окончания цикла.

Для того чтобы пропустить итерацию, и перейти к следующей итерации - есть функция continue .

При создании сайтов циклы используются практически всегда, не зависимо от стоимости создания сайта , функционала и других вещей. Поэтому отнеситесь к ним серьезно!

Очень часто при написании скриптов требуется выполнить одно и тоже действие несколько раз. Для этого и нужны циклы. Циклы в php, как и в других языках, делятся на несколько типов: Цикл со счетчиком for Цикл с условием while, do-while Цикл для обхода массивов foreach

OX2 2014-10-02 2014-10-02

В этой главе:

Чтобы приступить к использованию циклов, нужно узнать, что они собой представляют, на что способны и зачем нужны в сценариях. Цикл - это блок кода, позволяющий повторять выполнение некоторых действий (инструкций) определенное количество раз. Каждое отдельное исполнение (одно или более повторений) последовательности инструкций в цикле называется - итерация .

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

Программный код цикла исполняется до тех пор, пока условное выражение цикла возвращает значение TRUE. Чтобы избежать бесконечного цикла, который будет крутиться вечно, код тела цикла должен заставить условное выражение в определенный момент вернуть значение FALSE. Когда это произойдет, работа цикла прекратится, и исполнение продолжится со строки кода, расположенной непосредственно после цикла.

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

Цикл while является простейшим видом цикла в PHP. Его синтаксис:

Ниже приводится пример цикла while, тело которого исполняется 10 раз:

\n"; $num++; } ?>

Перед началом цикла значение переменной $num устанавливается равным 1 (значение может быть любым). Это называется инициализацией переменной-счетчика. Каждый раз, когда исполняется тело цикла, с помощью инкремента $num++ значение переменной $num увеличивается на единицу. Значение выражения ($num <= 10) проверяется каждый раз перед итерацией цикла. После десяти итераций условное выражение вернет значение FALSE (так как значение переменной $num уже будет не меньше или равно 10) и работа цикла прекратится. В том случае, если условное выражение while будет равно FALSE с самого начала, тело цикла ни разу не будут выполнено.

Большинство циклов имеют переменные-счетчики, аналогичные $num. Чаще всего в качестве счетчиков цикла выступают переменные с именами i, j и k, хотя для того чтобы сделать программный код более понятным, следует давать счетчикам более наглядные имена.

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

Цикл do while очень похож на цикл while, с тем отличием, что условное выражения проверяется в конце итерации, а не в начале. Синтаксис этого цикла:

Между циклом do while и обычным циклом while имеется два отличия. Во-первых, цикл do требует как ключевого слова do (для отметки начала цикла), так и ключевого слова while (для отметки конца цикла и указания условия). Во-вторых, в отличие от цикла while, цикл do завершается точкой с запятой. Данная разновидность цикла полезна, когда тело цикла должно быть исполнено хотя бы один раз, независимо от значения условного выражения.

Попробуем выполнить те же самые действия, что и в предыдущем примере:

\n"; $num++; } while ($num <= 10); ?>

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

Синтаксис оператора цикла for выглядит следующим образом:

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

  1. В начале цикла выполняется инициализирующее выражение, оно всегда вычисляется (выполняется) только один раз в самом начале.
  2. Далее следует условное выражение. Перед началом каждой итерации вычисляется значение условного выражения (условие выполнения), если оно принимает значение TRUE, то тело цикла выполняется, если оно принимает значение FALSE, выполнение цикла завершается. Если при первой проверке условие оказывается ложным, тело цикла не выполнится ни разу.
  3. В самом конце, после выполнения действий в теле цикла обрабатывается последнее выражение (следующее выражение после условия). В данном случае это инкрементирующее выражение - оно увеличивает с помощью инкремента значение переменной-счетчика.

Простой пример цикла for:

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

Цикл for без частей заголовка

Каждое из выражений в заголовке цикла for может отсутствовать.

Если инициализация не нужна или происходит в другом месте, инициализирующее выражение не нужно. Перепишем немного предыдущий пример:

Обратите внимание, символ точки с запятой обязателен, так как означает отсутствующее выражение. Отсутствие выражения условия эквивалентно расположению в условии значения TRUE.

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

Не стоит забывать о том, что любое из трех выражений или все сразу можно опустить, но разделительные точки с запятой (;) следует ставить всегда.

Несколько выражений в заголовке цикла for

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

"; } ?>

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

Вложенные циклы

Так же как и условные операторы, циклы могут быть вложенными. Простой пример с одним уровнем вложенности:

"; for ($j = 0; $j < 2; $j++) { echo "Вложенный цикл.
"; } } ?>

В PHP есть еще один оператор цикла - foreach, но его описание мы отложим на потом, так как он предназначен для работы с массивами и объектами.

Эту статью я пишу для новичков, которые только начинают изучать PHP . Расскажу я в этой статье о всевозможных циклах в PHP , так как данной статьи у меня на сайте не было. Были только , но, несмотря на общую схожесть, это всё-таки не то. В PHP есть 4 вида циклов .

  1. WHILE
  2. DO-WHILE
  3. FOREACH

Разберём их по порядку и начнём с самого популярного цикла в PHP (да и не только в PHP ) - это цикл FOR . Синтаксис у данного цикла следующий:

For(Выражение_1; Выражение_2; Выражение_3) {
операторы
}

Выражение_1 выполняется сразу же и безоговорочно, Выражение_3 выполняется после каждой итерации цикла. Выражение_2 - это проверка того, нужно ли продолжать цикл. Если результат выражения будет true , то начинается следующая итерация цикла, а если false , то цикл прекращает свою работу.

Следующий тип цикла - это WHILE . Это более простой тип циклов, синтаксис которого следующий:

While(Выражение) {
операторы
}

Пока Выражение возвращает true , цикл будет работать, а как только появится false , он прекращает свою работу.

Цикл DO-WHILE очень похож на WHILE , но с одним отличием. Условие выхода проверяется после выполнения итерации, а не до. Таким образом, данный цикл будет выполняться всегда хотя бы 1 раз. И вот синтаксис цикла DO-WHILE :

Do{
операторы
}while(Условие);

И, наконец, последний тип циклов - это foreach , который служит только для перебора массивов и объектов . Он необходим, когда ключами у массива являются не числа (которые легко перебрать через тот же FOR ), а строки. Синтаксис цикла FOREACH следующий:

Foreach($array_or_object as $key => $value) {
операторы
}

И, наконец, давайте применим все 4 типа циклов в PHP для перебора массивов :

$list = array(5, 2, 3, 10, 12, 10);
$array = array("a" => 1, "x" => 10, "m" => -5);
for ($i = 0; $i < count($list); $i++) {
echo $list[$i]."; ";
}
echo "
";
$i = 0;
while ($i < count($list)) {
echo $list[$i]."; ";
$i++;
}
echo "
";
$i = 0;
do {
echo $list[$i]."; ";
$i++;
}while($i < count($list));
echo "
";
foreach ($array as $key => $value) {
echo "$key = $value; ";
}
?>

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