Циклы php примеры. Синтаксис while в PHP

3 years ago

Do-while loops can also be used inside other loops, for example:

// generating an array with random even numbers between 1 and 1000

$numbers = array();
$array_size = 10 ;

// for loop runs as long as 2nd condition evaluates to true
for ($i = 0 ; $i < $array_size ; $i ++) {

// always executes (as long as the for-loop runs)
do {
$random = rand (1 , 1000 );

// if the random number is even (condition below is false), the do-while-loop execution ends
// if it"s uneven (condition below is true), the loop continues by generating a new random number
} while (($random % 2 ) == 1 );

// even random number is written to array and for-loop continues iteration until original condition is met
$numbers = $random ;
}

// sorting array by alphabet

Asort ($numbers );

// printing array

Echo "

"
;
print_r ($numbers );
echo "
" ;
?>

11 years ago

There is one major difference you should be aware of when using the do--while loop vs. using a simple while loop: And that is when the check condition is made.

In a do--while loop, the test condition evaluation is at the end of the loop. This means that the code inside of the loop will iterate once through before the condition is ever evaluated. This is ideal for tasks that need to execute once before a test is made to continue, such as test that is dependant upon the results of the loop.

Conversely, a plain while loop evaluates the test condition at the begining of the loop before any execution in the loop block is ever made. If for some reason your test condition evaluates to false at the very start of the loop, none of the code inside your loop will be executed.

2 years ago

The last example on this page is simply abuse of the `break` keyword. Also, the suggestion to use `goto` if you don"t understand the abuse of `break` is unsettling. (See the manual page for `goto` for more than enough reasons not to use it.)

The final example is generally better expressed using a typical if-else statement.

if ($i < 5 ) {
echo "i is not big enough" ;
} else {
$i *= $factor ;

If ($i >= $minimum_limit ) {
echo "i is ok" ;

/* process i */
}
}
?>

This version is easier to read and understand. And arguments for code golf are invalid as well as this version is 3 lines shorter.

In conclusion, although you can certainly write code that abuses the `break` keyword, you shouldn"t in practice. Keep the code easy to read and understand for whoever inherits your code. And remember, code is for humans not computers.

10 years ago

I"m guilty of writing constructs without curly braces sometimes... writing the do--while seemed a bit odd without the curly braces ({ and }), but just so everyone is aware of how this is written with a do--while...

a normal while:
while ($isValid ) $isValid = doSomething ($input );
?>

a do--while:
do $isValid = doSomething ($input );
while ($isValid );
?>

Also, a practical example of when to use a do--while when a simple while just won"t do (lol)... copying multiple 2nd level nodes from one document to another using the DOM XML extension

# open up/create the documents and grab the root element
$fileDoc = domxml_open_file ("example.xml" ); // existing xml we want to copy
$fileRoot = $fileDoc -> document_element ();
$newDoc = domxml_new_doc ("1.0" ); // new document we want to copy to
$newRoot = $newDoc -> create_element ("rootnode" );
$newRoot = $newDoc -> append_child ($newRoot ); // this is the node we want to copy to

# loop through nodes and clone (using deep)
$child = $fileRoot -> first_child (); // first_child must be called once and can only be called once
do $newRoot -> append_child ($child -> clone_node (true )); // do first, so that the result from first_child is appended
while ($child = $child -> next_sibling ()); // we have to use next_sibling for everything after first_child
?>

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

Цикл while

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

"; $i++; } ?>

Попробуйте запустить этот кусок кода. Цикл посчитает до 4 , так как принимаемые переменной значения будут не больше 5 . Каждый раз, когда цикл выполняет итерацию, мы добавляем 1 к значению $ i , а также выводим текущее значение. Независимо от того, какое условие вы хотите разместить в скобках оператора цикла PHP , оно должно оценивать Булево значение, т.е. истина (true ) или ложь (false ).

Цикл do-while

Этот цикл работает почти точно также как цикл while , но с одним важным отличием. В while значение логического выражения проверяется в начале цикла, в do-while — в конце итерации. Это означает, что с циклом do-while , вам гарантируется по крайней мере одна итерация, а в обычном while код может никогда не выполниться, если условие никогда не будет истинно.

Вот пример, показывающий как раз такое поведение:

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

С обычным циклом while пользователю ничего бы не вывелось, потому что $i равно 0 , и, следовательно, условие не выполняется. С оператором цикла PHP do-while мы гарантированно получаем одну итерацию. Впоследствии PHP «понимает », что условное выражение не является истинным (true ) и выходит из цикла.

Цикл for

Один из наиболее распространенных циклов в PHP . Ниже приведен пример использования цикла for :

"; } ?>

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

Цикл foreach

В PHP цикл foreach используется для перебора массива. Фактически, он работает только с массивами, и PHP сгенерирует ошибку при попытке использовать его с переменной, которая не содержит массив. Цикл foreach доступен в двух видах — вот пример первого из них:

"; ?>

foreach разработан для того, чтобы работать только с массивами, которые в свою очередь делают весь процесс проще. В каждой итерации переменной $animal присвоено значение из массива, что дает нам легкий доступ к нему. Этот небольшой фрагмент кода выведет список элементов (в данном случае животных ) массива.

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

"Dog", "Cat", "Snake", "Tiger"); foreach($animals as $key => $value) echo "Animal number " . $key . " is a " . $value . "
"; ?>

Вот так просто.

Перевод статьи “Loops ” был подготовлен дружной командой проекта .

Заметка: активирована адаптивная версия сайта, которая автоматически подстраивается под небольшой размер Вашего браузера и скрывает некоторые детали сайта для удобства чтения. Приятного просмотра!

Здравствуйте дорогие читатели и постоянные подписчики! Пришло время продолжить цикл статей о PHP и сегодня мы изучим такую базовую и при этом очень важную вещь, как циклы. Что вам нужно знать о циклах в первую очередь? А то, что применяются они везде и всюду, и шаблоны Joomla, VirtueMart, Wordpress, OpenCart и любой другой CMS - не исключение.

Что такое цикл? Цикл — это многократное повторение одного и того же участка кода. Сколько нужно сделать повторений – зависит от счётчика цикла, который мы сами создаём и можем им управлять. Это очень удобно, например, когда нам нужно отрисовать товары в категории интернет-магазина, вывести посты в блоге, вывести комментарии к статье или товару, все меню в CMS (движках сайтов) сделаны тоже с помощью циклов. В общем, циклы используются очень часто.

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

Оператор ++ (инкремент) увеличивает значение переменной на единицу, в то время как оператор -- (декремент) уменьшает значение переменной на единицу. Их очень удобно использовать в циклах как счётчик, да и в программировании в целом. Различают также ПРЕ инкремент/декремент и ПОСТ инкремент/декремент:

PRE инкремент/декремент ++$a Увеличивает $a на единицу и возвращает значение $a. --$a Уменьшает $a на единицу и возвращает значение $a. POST инкремент/декремент $a++ Возвращает значение $a, а затем увеличивает $a на единицу. $a-- Возвращает значение $a, а затем уменьшает $a на единицу.

Например:

$a = 1; echo "Вывод числа: " . $a++; // Вывод числа: 1 echo " Вывод числа: " . $a; // Вывод числа: 2 echo "Вывод числа: $a"; $a += 1; // тоже самое, что и в первой строке $a = 1; echo "Вывод числа: " . ++$a; // Вывод числа: 2 echo "Вывод числа: " . $a; // Вывод числа: 2 $a += 1; echo "Вывод числа: $a"; // тоже самое, что и в первой строке этого блока

Цикл for

for (часть А; часть В; часть С){ // Любой код, сколько угодно строк; }

Цикл for состоит из 3 частей и самого тела. Часть А просто выполняет то, что в ней написано, как правило, в 90% случаев там создаётся счётчик цикла. Часть В – это, грубо говоря, уже знакомый нам if , то есть проверка на истину (true?). Если условие верно, то есть true , тогда PHP заходит внутрь цикла и продолжает его исполнять. Часть С – тоже самое что часть А, как правило в Части С мы делаем какие-то преобразования с счётчиком. Например:

"; } echo "ВЫШЛИ ИЗ ЦИКЛА и пошли дальше по коду..."; ?>

Теперь об алгоритме работы цикла for. Первым делом, увидев for, PHP заходит в часть А и выполняет её один единственный раз (см. изображение ниже). Далее PHP переходит в часть В и проверяет, true там или false. Если true, то выполняет тело цикла и только после этого переходит в часть С. После этого PHP снова переходит в часть В и проверяет, там до сих пор true или уже нет. Если нет, то цикл заканчивается, если да, то продолжается до тех пор, пока в части В не будет false.

Результат работы предыдущего примера:

Цикл While

while (часть В){ // Любой код, сколько угодно строк; }

Как видите, здесь нету части А и части С, из цикла for здесь осталось только условие, то есть часть В. Если нам нужно использовать счётчик, то мы должны поместить его внутрь цикла while, среди остального кода, это будет част С. А создавать счётчик нужно до начала конструкции while:

Часть А; while (часть В){ // Любой код, сколько угодно строк; Часть С; }

Переделаем предыдущий цикл for в цикл while:

"; $i++; } echo "ВЫШЛИ ИЗ ЦИКЛА и пошли дальше по коду..."; ?>

Результат будет точно таким же. Что использовать: цикл for или цикл while – дело вкуса, смотрите как вам удобней и логичней, разницы нет.

Цикл do... while

Менее распространённый из всех видов циклов. По сути это перевёрнутый while. Его фишка в том, что PHP хотя бы один раз (первый), но обязательно зайдёт в тело цикла do... while, потому что в этом цикле условие в конце:

Часть А; do{ // Любой код, сколько угодно строк; Часть С; }while(Часть В);

"; $i++; }while($i < 8); echo "ВЫШЛИ ИЗ ЦИКЛА и пошли дальше по коду..."; ?>

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

Пример цикла for без части А и части С:

For(;$i > 8;){ // ваш код }

Пример цикла for без всех трёх частей:

For(;;){ // классический бесконечный цикл }

То есть все точки с запятой всё равно остаются в цикле for, такой синтаксис!

Бесконечные циклы

Бесконечный цикл – это ошибка разработчика, при которой страница никогда не сможет загрузиться до конца, так как условие цикла (часть В) всегда будет true. Например:

"; $i++; }while($i != 0); echo "ВЫШЛИ ИЗ ЦИКЛА и пошли дальше по коду..."; ?>

Результат:

Это я показал лишь часть, потому что в экран всё не помещается. Вот так ваш браузер и сервер вашего сайта будут мучатся бесконечно, пока браузер не откажет секунд через 30. А все потому, что в примере выше переменная $i никогда не будет равно нулю, она изначально равна 1 и постоянно возрастает.

То есть разработчик был невнимательным, когда придумал такое условие.

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

Оператор break. Бывают ситуации, когда нам не нужно, чтобы цикл отыгрывал все итерации (повторения). Например, в какой-то определённый момент мы хотим его прервать и продолжить выполнение ниже по коду:

"; if ($i === 5) break; // выходим из цикла если $i равно 5 $i++; } echo "Я умею считать только до 5:("; ?>

Результат:

В примере выше как только мы дошли до пяти, PHP вышел из цикла, а так бы он досчитал до 7.

Оператор continue тоже прерывает выполнение цикла, но в отличии от break, continue не выходит из цикла, а возвращает интерпретатор PHP назад к условию (к части В). Пример:

"; } echo "Что-то пропустил?"; ?>

Результат:

Только что мы пропустили цифру 5, так как PHP не дошёл до echo.

Цикл может быть вложен в цикл. В таком случае операторы continue и break распространяются только на один цикл, тот, в котором они находятся. То есть другими словами перебрасывают на один уровень, а не через все. Пример:

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

"; $i++; $i=1; $k=1; while ($k < 8) { echo "Итерация $k номер ". $k . "
"; if ($k === 5) break 2; $k++; } } ?>

Результат:

Естественно при этом мы не можем ставить число больше, чем у нас вложенных циклов.

Цикл foreach

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

"; } ?>

Результат:

Это была коротка конструкция foreach, но она имеет и расширенную версию, которая кроме значения ячеек массива выводит ещё и названия ячеек (ключи):

$value) { echo "В разделе " . $key . " есть статья под названием: ". $value . "
"; } ?>

Результат:

Обращаю ваше внимание на то, что переменные мы можем называть как захотим, хоть $key и $value, хоть $xxx и $yyy.

Если массив, то используем только цикл foreach и никаких других. Именно этот цикл используется повсюду в VirtueMart, да и вообще везде.

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

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 ; /* Это добавляет к массиву новый