Эту статью я пишу для новичков, которые только начинают изучать PHP . Расскажу я в этой статье о всевозможных циклах в PHP , так как данной статьи у меня на сайте не было. Были только , но, несмотря на общую схожесть, это всё-таки не то. В PHP есть 4 вида циклов .
Разберём их по порядку и начнём с самого популярного цикла в 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; ";
}
?>
Все эти циклы обязан знать наизусть любой программист, поэтому если вдруг что-то непонятно, перечитайте ещё раз, либо задайте вопрос в комментариях, и я постараюсь ответить.
Последнее обновление: 1.11.2015
Для совершения повторяемых действий в PHP, как и в других языках программирования, используются циклы. В PHP имеются следующие виды циклов:
Цикл for имеет следующее формальное определение:
For ([инициализация счетчика]; [условие]; [изменение счетчика]) { // действия }
Рассмотрим стандартный цикл for:
"; } ?>
Первая часть объявления цикла - $i = 1 - создает и инициализирует счетчик - переменную $i. И перед выполнением цикла его значение будет равно 1. По сути это то же самое, что и объявление переменной.
Вторая часть - условие, при котором будет выполняться цикл. В данном случае цикл будет выполняться, пока $i не достигнет 10.
Третья часть - приращение счетчика на единицу. Опять же нам необязательно увеличивать на единицу. Можно уменьшать: $i--.
В итоге блок цикла сработает 9 раз, пока значение $i не станет равным 10. И каждый раз это значение будет увеличиваться на 1. Каждое отдельное повторение цикла называется итерацией. Таким образом, в данном случае произойдет 9 итераций.
Цикл while проверяет истинность некоторого условия, и если условие истинно, то выполняются блок выражений цикла:
"; $counter++; } ?>
Если в блоке while всего одна инструкция, то фигурные скобки блока можно опустить:
"; ?>
Цикл do..while похож на цикл while , только теперь выполняется блок цикла, и только потом выполняется проверка условия. То есть даже если условие ложно, то блок цикла выполнится как минимум один раз:
"; $counter++; } while($counter<10) ?>
Иногда возникает ситуация, когда требуется выйти из цикла, не дожидаясь его завершения. В этом случае мы можем воспользоваться оператором break:
80)
{
break;
}
echo "Квадрат числа $i равен $result
";
}
?>
И если вдруг результат операции окажется больше 80, то происходит выход из цикла.
Для управления циклами также применяется оператор continue . Он осуществляет переход к следующей итерации цикла:
"; } ?>
При выполнении программы, когда значение $i станет равным 5, произойдет переход к следующей итерации, а все остальные выражения, которые следуют после оператора continue выполняться не будут.
Очень часто при написании скриптов требуется выполнить одно и тоже действие несколько раз. Для этого и нужны циклы. Циклы в php , как и в других языках, делятся на несколько типов:
Например, при создании интернет магазина , нам нужно до вывода товаров на экран, убрать товары, остаток на складе которых ниже 10. Для этого мы в цикле обходим массив с товарами, и при помощи условного оператора if, сверяем кол-во товаров на складе, и убираем из массива все товары, у которых значение на складе меньше 10.
Цикл со счетчиком 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 скрипт работает с базами данных. Используется для обхода массивов.
Например, рассмотрим небольшой пример:
$value) {
echo "Ключ: $key, Значение: $value
";
}
?>
Запустив скрипт вы увидете:
Ключ: 0, Значение: red Ключ: 1, Значение: blue Ключ: 2, Значение: green Ключ: color, Значение: yellow Ключ: test, Значение: дизайн студия ox2.ru
Цикл while используется для выполнения цикла до тех пор, пока выполняется условие. Если условие ни когда не будет выполнено, то цикл зациклиться.
Рассмотрим пример:
"; } ?>
На экране увидим числа от 1 до 19
Цикл 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На уроке будут рассмотрены операторы цикла 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; ...; }
Рис. 4.4. Пример использования цикла 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
Этап 2
Этап 3
Дополните код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
", $tr * $td, " | "; }else{ echo "", $tr * $td, " | "; } } echo ""; } ?>
---|
Для удобства работы с массивами часто используется функция count()
Функция возвращает кол-во элементов массива
count ($masiv ) ;
Пример: Дан массив, состоящий из названий времен года. Необходимо вывести все элементы массива неизвестного размера
1 2 3 4 5 6 7 8 9 | $mas
[$n
]"
.
" " ; } ?> |
"; } ?>
Результат:
Обход массива наиболее выгодным образом происходит при помощи итерационного цикла 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 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
используя массив в качестве структуры меню.
Алгоритм:
4 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 "
12 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
?>