Последнее обновление: 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 выполняться не будут.
В некоторых случаях необходимо выполнять код до тех пор, пока не будет достигнут нужный результат. Для этого PHP предоставляет циклы while , for и foreach .
Синтаксис цикла while в PHP
Синтаксис цикла while :
Пример использования цикла while в PHP :
В примере цикла while в php , приведенном выше, сначала инициализируется переменная счётчика $ i значением 0 .
Условие цикла while – это $ i < 10 . Это означает, что мы проверяем, меньше ли переменная, чем 10.
Всё, что заключено в фигурные скобки – это инструкции (тело ) цикла. Они повторяются до тех пор, пока условие возвращает значение true . В примере, приведенном выше, $ i выводится на экран, а затем переменная счётчика увеличивается на 1. Это важно чтобы условие цикла, в конце концов, перестало соблюдаться. Если условие цикла соблюдается всегда, например, потому что вы забыли увеличить переменную счётчика $ i , тогда скрипт войдёт в бесконечный цикл. К счастью, через некоторое время PHP прекратит выполнение вашего скрипта.
Вы можете сделать как условие цикла, так и тело цикла сколь угодно сложными. Например, использовать while внутри while php, использовать php while для перебора массива (array ) или определить более одной переменной счётчика:
$min) {
echo "count1: $count1; count2: $count2
";
$ counter1 += 2; // Сокращённое выражение для $counter1 = $counter1 + 2;
$counter2 -= 3; // Сокращённое выражение для $count2 = $count2-3;
}
?>
В примере определяются две переменные: $ counter 1 и $ counter 2 . Одна переменная увеличивается на 2, а другая уменьшается на 3. Цикл while выполняется, пока соблюдаются оба условия $ count 1 < $ max и $ count 2 > $ min .
Влияние ключевых слов break и continue на цикл
С помощью команды break можно прервать процесс выполнения цикла while в PHP . Допустим, мы ищем определённого пользователя. Тогда можно пройти по всем пользователям в цикле while . Если найдём нужного пользователя, то остановим цикл с помощью ключевого слова break .
Простой пример использования ключевого слова break :
while ($count < $max) { if ($count == 10) { echo "Останавливаемся на числе 10"; break; } echo "$count,"; $counter += $increment; // увеличивает $count на значение $increment } ?>
Этот код перебирает числа по возрастанию от 0 до $max = 30 , прибавляя к переменной $ count значение $ increment , другими словами число 2. Но если переменная $ count будет равна 10, произойдет выход из цикла while в php .
Ключевое слово continue не завершает цикл while в php полностью , а лишь пропускает оставшуюся часть тела цикла. Приведенный ниже пример демонстрирует это:
while ($count < $max) {
$counter += $increment; // увеличивает $payer на $increment
if ($count >= 10 && $count <= 15) {
echo "Число между 10 и 15
";
continue;
}
echo "$count
";
}
?>
Этот цикл начинается с 0 и увеличивает счётчик до значения $ max . Переменная $ counter всегда увеличивается на значение переменной $ increment . То есть принимает значения 0, 2, 4 и т.д.
Если переменная $ count имеет значение между 10 и 15, на экран будет выведен текст и оператор continue пропустит остальные выражения в теле цикла. В результате мы видим, что числа 10, 12 и 14 не выводятся.
Цикл do-while в PHP
Небольшой модификацией while является цикл do — while . В данном случае условие цикла проверяется только после выполнения его тела. Это значит, что тело цикла выполнится хотя бы один раз.
Синтаксис цикла do-while :
Предположим, что мы хотим сгенерировать случайное число, которое должно быть либо между 0 и 10, либо между 20 и 30. Согласно определению функции rand ($ min , $ max ) , можно случайным образом сгенерировать число между $ min и $ max :
10 && $random < 20) { $random = rand (0, 30); }
echo "Наше случайное число: $random"; ?>
Используя php цикл do — while , можно получить значение выражения без инициализации переменной $ random . Тело цикла выполняется перед тем, как проверяется условие. Тогда пример, приведенный выше, будет выглядеть следующим образом:
10 && $random < 20);
echo " Наше случайное число: $random"; ?>
Новичка цикл do-while может слегка сбить с толку. Если вы до конца не понимаете его цели, то это не проблема. Циклы do-while редко используются на практике.
Операторы цикла используются очень часто в любых языках программирования. Почти все задачи используют циклы, поэтому стоит обратить особое внимание на их изучение. В PHP существуют 4 вида циклов:
- while (префиксная проверка условия);
- do..while (постперфиксная проверка условия);
- for ;
- foreach ;
Первые три цикла похожи на стандартные циклы из языков программирования (С++, Pascal), а последний (foreach) на Perl. Рассмотрим в отдельности первые три операторов цикла, а последний будет рассмотрен в отдельном уроке. Отметим то, что каждый из циклов допускает вложенные циклы, то есть цикл внутри цикла.
Оператор цикла while в PHP
Довольно простой оператор цикла, синтаксис которого очень похож на синтаксис в других языка программирования.
Синтаксис while в PHP:
//может быть сложное логическое условие { операторы; } ?>
В условие стоит некое выражение, которое должно быть либо истинным (true), либо ложным (false). В случае истинного значения условия выполняются операторы, которые стоят в фигурных скобках. После чего опять происходит проверка условия на истинность. Если условие ложное, то программа не входит в цикл. В случае одного оператора фигурные скобки можно опустить.
Примечание : условие может состоять из очень многих выражений с использованием алгебры логики &&, ||, ! и т.д.
Стоит обратить внимание на то, что если в условие есть операторы, то они должны как-то изменяться, иначе цикл просто зациклиться.
Приведу простой пример на использование while :
"; $i++; } ?>
Выше описанный пример выведет следующий результат:
i = 0
i = 1
i = 2
i = 3
i = 4
Обратите внимание, что $i=5 не будет выведено, т.к. i увеличивается в самом конце цикла и поэтому как только он достигнет 5, то условие входа в цикл просто не выполнится.
Оператор break в PHP
Для немедленного прекращения цикла есть специальный оператор break . Данный оператор часто используется для выхода из бесконечного цикла, когда условие всегда истинно. Например, выше описанный пример можно было написать следующим образом:
//условие всегда истинно { echo "i =".$i."
"; $i++; if($i>=5) break; } ?>
Результат будет такой же, как и в предыдущем примере.
Оператор continue в PHP
Оператор continue; прекращает текущую итерацию цикла, перемещаясь в начало, но не прекращает цикл полностью. Например:
//условие всегда истинно { echo "i =".$i."
"; $i++; if($i>=5) break; else continue; } ?>
Результат этого примера будет таким же, как и у предыдущих примеров.
Как показывает практика, операторы continue; и break; зачастую помогают реализовать сложные циклы.
Приведу ещё пример по использованию цикла while :
"; } //результаты этих двух while будут разными //из-за постпрефиксной и префиксной формы $i=0; while (++$i //префиксная форма { echo "i =".$i."
"; } ?>
Оператор цикла do...while в PHP
Оператор do...while очень похож на обычный while . Единственное их отличие во времени проверки условия. Цикл do...while будет выполнен хотя бы один раз, поскольку проверка происходит в самом конце. Синтаксис do...while :
Рассмотрим пример:
"; $i++; } while($i
Его результат аналогичен первым рассмотренным примерам.
Стоит отметить, что операторы continue; и break; также могут применяться в таких циклах.
Оператор цикла for в PHP
Синтаксис оператора for следующий:
В start происходит начальная инициализация переменных. В usloviya должны стоять одно или несколько условий завершения цикла. В shag заносятся операторы, которые выполняются в конце каждой итерации. Например:
"; } ?>
Результат выполнения этого цикла будет таким же как и у предыдущих примеров.
Большим плюсом использования for , что тело цикла может отсутствовать, а все необходимые операции выполнены в разделе shag . Для наглядности приведем пример:
", $i++); ?>
Замечание : в shag недопустимо использование функции echo .
Шаг цикла и условия могут быть самыми разнообразными. Например, можно написать не i++, а i+=5 (инкремент на 5).
Каждый из разделов цикла for может быть опущен, в таком случае получается бесконечный цикл:
for допускает использование continue; и break; .
На последок приведем пример двух эквивалентных конструкций цикла, но один будет for, а другой while
Эквивалентна следующей:
Если внутри строки, заключенной в одинарные кавычки, обратный слэш «\» встречается перед любым другим символом (отличным от «\» и «"»), то он рассматривается как обычный символ и выводится, как и все остальные. Поэтому обратную косую черту необходимо экранировать, только если она находится в конце строки, перед закрывающей кавычкой.
В 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 <<
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
;
/* Это добавляет к массиву новый