Php цикл do while значение выражения. Циклы

Эту статью я пишу для новичков, которые только начинают изучать 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; ";
}
?>

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

На уроке будут рассмотрены операторы цикла php: цикл while php, цикл foreach, цикл do while и цикл со счетчиком for. Будут разобраны примеры выхода из цикла (в php — break и continue)

Синтаксис:

while (условие){ оператор 1; оператор 2; ... }

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

Рис. 4.1. Пример использования цикла While


Результат:

1 2 3 4 5 6 7 8 9 10

Кроме того, можно использовать альтернативный синтаксис :

while (условие): оператор 1; оператор 2; ... endwhile;

Рис. 4.2. Пример альтернативного использования цикла While


Пример: Выводить на экран ряд чисел 4 7 10 13 16 19 22… Всего вывести 30 цифр. Использовать цикл While php


Решение:
1 2 3 4 5 6 $sum = 1 ; while ($i <= 30 ) { $sum += 3 ; $i ++; echo ($sum . " " ) ; }

$sum=1; while ($i<=30){ $sum+=3; $i++; echo ($sum." "); }

Результат:

4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94

Пример: Выводить степени двойки до значения 1024



Решение:

do { оператор 1; оператор 2; ... } while (условие);

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

Рис. 4.3. Пример использования цикла Do While


Результат:

1 2 3 4 5 6 7 8 9 10

Пример: Выводить на экран ряд чисел 4 7 10 13 16 19 22.. . Всего вывести 30 цифр



Решение:

for (начальное значение счетчика; условие продолжения цикла; изменение счетчика на каждой итерации) { оператор 1; оператор 2; ...; }

  • После служебного слова for в скобках через; обязательно указываются 3 параметра.
  • Цикл For в php может быть и без фигурных скобок, если в теле цикла присутствует только один оператор.

Рис. 4.4. Пример использования цикла For


Результат:

Привет!
Привет!
Привет!
Привет!
Привет!

  • В php для цикла for поддерживается альтернативный синтаксис:
  • for (начальное значение счетчика; условие продолжения цикла; изменение счетчика на каждой итерации) : оператор 1; оператор 2; ...; endfor;

Пример: Выводить в окно браузера числа от 1 до 10


Решение:
1 2 3 for ($i = 1 ; $i <= 10 ; $i ++ ) { echo $i . " " ; }

for ($i = 1; $i <= 10; $i ++) { echo $i." "; }

Результат:

Лабораторная работа:
Нарисовать таблицу умножения

Этап 1

  1. Создайте две числовые переменные cols и rows
  2. Присвойте созданным переменным произвольные значения в диапазоне от 1 до 10

Этап 2

  1. Используя циклы, отрисуйте таблицу умножения в виде HTML-таблицы на следующих условиях:
  • Число столбцов должно быть равно значению переменной cols
  • Число строк должно быть равно значению переменной rows
  • Ячейки на пересечении столбцов и строк должны содержать значения, являющиеся произведением порядковых номеров столбца и строки
  • Рекомендуется использовать циклы for
  • Этап 3

    • Значения в ячейках первой строки и первого столбца должны быть отрисованы полужирным шрифтом
    • Фоновый цвет ячеек первой строки и первого столбца должен быть отличным от фонового цвета таблицы. Сохраните файл.

    Дополните код:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 " ; for ($td = 1 ; ...; ... ) { if (... ) { echo "" ; } else { echo "" ; } } echo "" ; } ?>
    " , $tr * $td , "" , $tr * $td , "

    "; for($td=1; ...; ...){ if(...){ echo ""; }else{ echo ""; } } echo ""; } ?>
    ", $tr * $td, "", $tr * $td, "

    Количество элементов массива

    Для удобства работы с массивами часто используется функция count()

    Функция возвращает кол-во элементов массива

    count ($masiv ) ;

    Пример: Дан массив, состоящий из названий времен года. Необходимо вывести все элементы массива неизвестного размера


    Решение:
    1 2 3 4 5 6 7 8 9 $mas [$n ]" . "
    " ; } ?>

    "; } ?>

    Результат:

    Цикл Foreach в php

    Обход массива наиболее выгодным образом происходит при помощи итерационного цикла foreach , позаимствованного из синтаксиса языка Perl.


    Рис. 4.6. Пример использования цикла Foreach, полный вариант


    Результат:

    Массив с индексом 0 равен 1
    Массив с индексом 1 равен 2
    Массив с индексом 2 равен 3
    Массив с индексом 3 равен 4

    Пример: Выводить индексы и значения массива user , в котором записаны данные об Иване


    Решение:
    1 2 3 4 5 6 7 8 $user [ "name" ] = "Ivan" ; $user [ "login" ] = "root" ; $user [ "password" ] = "p@ssword" ; $user = "312-34-85" ; foreach ($user as $index => $value ) { echo "Индекс $index равен $value
    "
    ; }

    $user["name"]="Ivan"; $user["login"]="root"; $user["password"]="p@ssword"; $user="312-34-85"; foreach($user as $index =>$value){ echo "Индекс $index равен $value
    "; }

    Результат:

    Пример:

    1. Выводить приветствие для имен из списка
    2. Кроме приветствия выводить номера в списке
    1 2 3 4 5 6 7 8 9 10 $names = array ("Иван" , "Петр" , "Семен" ) ; // 1 задание foreach ($names as $val ) { echo "Привет, $val
    "
    ; } // 2 задание foreach ($names as $k => $val ) { echo "Привет, $val ! Ты в списке под номером $k
    "
    ; }

    $names = array("Иван","Петр","Семен"); // 1 задание foreach ($names as $val) { echo "Привет, $val
    "; } // 2 задание foreach ($names as $k => $val) { echo "Привет, $val ! Ты в списке под номером $k
    "; }

    Результат:

    Задание php 4_3: Дан массив, состоящий из названий дней недели. Вывести элементы, используя конструкцию foreach .

    Дополнительно: вывод должен быть в формате: понедельник – день 1 -й



    Лабораторная работа:
    Нарисовать (добавить) навигационное меню на странице, типа:

    <a href = "contact.php" > Contact</ a >

    Contact

    используя массив в качестве структуры меню.

    Алгоритм:

    1. Создайте ассоциативный массив $menu
    2. Заполните массив, соблюдая следующие условия:
    • Индексом элемента массива является пункт меню, например: Home , About , Contact
    • Значением элемента массива является имя файла, на который будет указывать ссылка, например: index.php , about.php , contact.html
  • Используя цикл foreach отрисуйте вертикальное меню, структура которого описана в массиве $menu
  • 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.

    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 ;
    ?>

    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.

    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;
    ?>

    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){ }

    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" ;
    ?>

    4 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
    }
    }
    ?>

    14 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,

    3 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

    ?>

    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. :-)

    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).

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

    echo "Также вы можете вставлять в строки
    символ новой строки таким образом,
    поскольку это нормально"
    ;
    // Выведет: Чтобы вывести " надо
    // перед ней поставить \
    echo "Чтобы вывести \" надо перед " .
    "ней поставить \\" ;
    // Выведет: Вы хотите удалить C:\*.*?
    echo "Вы хотите удалить C:\\*.*?" ;
    // Выведет: Это не вставит: \n
    // новую строку
    echo "Это не вставит: \n новую строку" ;
    // Выведет: Переменные $expand также
    // $either не подставляются
    echo "Переменные $expand также $either" .
    "не подставляются" ;
    ?>

    16.1. Пример. Использование управляющих последовательностей

    17. Двойные кавычки

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

    Некоторые из них приведены в таблице.
    Таблица. Управляющие последовательности.

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

    Самым важным свойством строк в двойных кавычках является обработка переменных.

    Heredoc

    Другой способ определения строк – это использование heredoc-синтаксиса. В этом случае строка должна начинаться с символа <<<, после которого идет идентификатор. Заканчивается строка этим же идентификатором. Закрывающий идентификатор должен начинаться в первом столбце строки. Кроме того, идентификатор должен соответствовать тем же правилам именования, что и все остальные метки в PHP: содержать только буквенно-цифровые символы и знак подчеркивания и начинаться не с цифры или знака подчеркивания.

    Heredoc-текст ведет себя так же, как и строка в двойных кавычках, при этом их не имея. Это означает, что вам нет необходимости экранировать кавычки в heredoc, но вы по-прежнему можете использовать перечисленные выше управляющие последовательности.

    Переменные внутри heredoc тоже обрабатываются.

    $str = <<Пример строки,охватывающей несколько
    строчек, с использованием
    heredoc-синтаксиса
    EOD;
    // Здесь идентификатор – EOD. Ниже
    // идентификатор EOT
    $name = "Вася" ;
    echo <<Меня зовут "$name".
    EOT;
    // это выведет "Меня зовут "Вася"."
    ?>

    Пример. Использование heredoc-синтаксиса
    Замечание: Поддержка heredoc была добавлена в PHP 4.

    18. Тип array (массив)

    Массив в PHP представляет собой упорядоченную карту – тип, который преобразует значения в ключи. Этот тип оптимизирован в нескольких направлениях, поэтому вы можете использовать его как собственно массив, список (вектор), хеш-таблицу (являющуюся реализацией карты), стэк, очередь и т.д. Поскольку вы можете иметь в качестве значения другой массив PHP, можно
    также легко эмулировать деревья.

    Определить массив можно с помощью конструкции array() или непосредственно задавая значения его элементам. Определение при помощи
    array() array ( => value,
    => value1, ...)

    Языковая конструкция array() принимает в качестве параметров пары ключ => значение, разделенные запятыми. Символ => устанавливает соответствие между значением и его ключом. Ключ может быть как целым числом, так и строкой, а значение может быть любого имеющегося в PHP типа. Числовой ключ массива часто называют индексом. Индексирование массива в PHP начинается с нуля.

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

    Поэтому запись $a["1"] равносильна записи $a, так же как и $a["-1"] равносильно $a[-1].

    $books = array ("php" =>
    "PHP users guide" ,
    12 => true );
    echo $books [ "php" ];
    //выведет "PHP users guide"
    echo $books [ 12 ]; //выведет 1
    ?>

    18.1. Пример. Массивы в PHP

    Если для элемента ключ не задан, то в качестве ключа берется максимальный числовой ключ, увеличенный на единицу. Если указать ключ, которому уже было присвоено какое-то значение, то оно будет перезаписано. Начиная с PHP 4.3.0, если максимальный ключ – отрицательное число, то следующим ключом массива будет ноль (0).

    // массивы $arr и $arr1 эквиваленты
    $arr = array(5 => 43 , 32 , 56 , "b" => 12 );
    $arr1 = array(5 => 43 , 6 => 32 ,
    7 => 56 , "b" => 12 );
    ?>

    18.2. Пример. Массивы в PHP

    Если использовать в качестве ключа TRUE или FALSE, то его значение переводится соответственно в единицу и ноль типа integer. Если использовать NULL, то вместо ключа получим пустую строку. Можно использовать и саму пустую строку в качестве ключа, при этом ее надо брать в кавычки. Так что это не то же самое, что использование пустых квадратных скобок. Нельзя использовать в качестве ключа массивы и объекты.

    Определение с помощью синтаксиса квадратных скобок

    Создать массив можно, просто записывая в него значения. Как мы уже говорили, значение элемента массива можно получить с помощью квадратных скобок, внутри которых нужно указать его ключ например, $book["php"]. Если указать новый ключ и новое значение например, $book["new_key"]="new_value", то в массив добавится новый элемент. Если мы не укажем ключ, а только присвоим значение $book="new_value", то новый элемент массива будет иметь числовой ключ, на единицу больший максимального существующего. Если массив, в который мы добавляем значения, еще не существует, то он будет создан.

    $books [ "key" ]= value ; // добавили в массив
    // $books значение
    // value с ключом key
    $books = value1 ; /* добавили в массив
    значение value1 с
    ключом 13, поскольку
    максимальный ключ у
    нас был 12 */
    ?>

    Для того чтобы изменить конкретный элемент массива, нужно просто присвоить ему с его ключом новое значение. Изменить ключ элемента нельзя, можно только удалить элемент (пару ключ/значение) и добавить новую. Чтобы удалить элемент массива, нужно использовать функцию unset().

    $books = array ("php" =>
    "PHP users guide" ,
    12 => true );
    $books =
    "Book about Perl" ; // добавили элемент
    // с ключом (индексом)
    // 13 это эквивалентно
    // $books =
    // "Book about Perl";
    $books [ "lisp" ] =
    123456 ; /* Это добавляет к массиву новый

    Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье мы разобрали ссылки в PHP . В данной статье я бы хотел рассказать о различных циклах в PHP . Всего их существует 4 вида:

    • Итерационный цикл for
    • Цикл с предусловием
    • Цикл с постусловием
    • Цикл foreach

    Давайте сразу на примерах разберем все циклы. Пусть будет такая задача: необходимо для 10 элементов вывести квадраты числа.
    1) Итерационный цикл for :

    "; } ?>

    В данном цикле можно использовать несколько условий. Пусть необходимо проверить, если элемент равен 6, то больше ничего не выводить (оператор break пока не знаем). Можно написать так:

    "; } ?>

    2) Цикл с предусловием :

    "; $i++; } ?>

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

    3) Цикл с постусловием :

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

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

    4) Цикл foreach . Данный цикл предназначен для перебора значений массива и появился только в четвертой версии языка PHP. Массив — это некоторый набор ключей, каждому из которых соответствует некоторое значение. Более подробно массивы будут разбираться в следующих статьях. Рекомендую подписаться на обновления, чтобы не пропустить.
    Синтаксис данного цикла следующий:

    Foreach (массив as $key=>$value) { блок операторов }

    $key представляет собой ключ , $value — значение. Данная конструкция не изменяет исходный массив. Чтобы иметь возможность изменять исходный массив, необходимо использовать ссылочный тип:

    Foreach (массив as $key=>&$value) { блок операторов }

    Давайте с помощью данного цикла выведем содержимое всех переменных окружения (массив $_SERVER ):

    $value) { echo "$key => $value
    "; } ?>

    Обязательно наберите данный пример и посмотрите, как всё работает.

    Очень часто возникает ситуация, когда необходимо прервать выполнения цикла. Для этого необходимо использовать конструкцию break . У данной конструкции есть один необязательный параметр. По умолчанию данный параметр равен 1, т.е. мы прерываем выполнение текущего цикла. Давайте разберем такой пример: создадим 2 итерационных цикла от 1 до 5 и, если число будет равно 5, то выведем число. В данном случае, если мы будем использовать просто break , то число 5 будет выведено 5 раз. Если же мы напишем break(2) , то только один раз:

    "; break; //запустите скрипт, а затем напишите break(2); } } } ?>

    Данный оператор удобно использовать для циклов поиска. Как только мы нашли то, что искали — сразу завершаем цикл.

    Оператор continue , наоборот, пропускает текущую итерацию цикла и переходит уже к следующей. Также в скобках можно указать уровень вложенности цикла.
    Пример не буду приводить, дам домашнее задание на этот оператор.