Условия и циклы в PHP
Условия в PHP позволяют сравнивать переменные, а циклы выполнять похожую операцию много раз.
Очень часто используется тернарный оператор:
$str = $a > $b ? 'вывод исли $a больше $b' : 'вывод если $a меньше или равно $b';
echo $str;
* в скобках после ? - если условие tru, в скобках после : - если false.
Самое простое условие: если в круглых скобках истина то выведет то что в фигурных, если ложь то пропустит и будет выполнять код дальше.
//Вывести - Ты подросток если переменная age меньше 15:
if($age < 15) echo "Ты подросток";
Немного усложняемся: если в круглых скобках истина то выведет первое условие, а если ложь то второе после else:
//выведет 20 - наибольшее из двух значений:
<?php
$x = 10;
$y = 20;
if ($x >= $y) echo "$x";
else echo "$y";
?>
если первая и второя инструкция состоит из нескольких страниц то уже нужны фигурные скобки.
Можно использовать знак && чтобы искать значение переменной age между 13 и 19.
если в первых фигурных скобках ложь, проверяется второе условие на истину- если здесь правда - выводим вторые фигурные скобки.
<?php
$age = 21;
if ($age<=13) {echo "Child.";}
elseif ($age>13 && $age<19) {echo "Teenager";}
else {echo "Adult";}
?>
// Або в коді HTML:
<?php if ($a == 5): ?>
A равно 5
<?php endif; ?>
Цикл while
Цикл while выполняет блок кода пока указаное в скобках условие - ВЕРНОЕ!
Если условие никогда не становится ложным, то выражение будет бесконечным!
$i = 1;
while ($i <= 10) {
echo $i++;
}
выведет: - 12345678910
С помощью циклов можно работать и со строками:
<?php
function printNameBySymbol($name)
{
$i = 0;
// Такая проверка будет выполняться до конца строки
// включая последний символ. Его индекс `длина строки - 1`.
while ($i < strlen($name)) {
// Обращаемся к символу по индексу
print_r("$name[$i]\n");
$i = $i + 1;
}
}
$name = 'Arya';
printNameBySymbol($name);
// => 'A'
// => 'r'
// => 'y'
// => 'a'
Условие в while можно сделать сразу двумя способами: $i < strlen($name) или $i <= strlen($name) - 1. Оба приведут к одному результату.
Цикл do while
Цикл do while выполняет блок коди минимум 1 раз, проверяет условие, и повторяет цикл пок условие верное.
код всегда будет выполнен 1 раз!
<?php
$i = 0;
do {
echo $i;
} while ($i > 0);
?>
// даже здесь цикл выполнится 1 раз.
Цикл for
Цикл for используется тогда, когда вы заранее знаете, сколько раз должен запуститься скрипт.
init: Инициализирует значение счетчика цикла
test: Вычисляется при каждой итерации цикла, продолжая выполнение, если условие верно, и останавливаясь, если условие ложно
increment: Увеличивает значение счетчика цикл
for (init; test; increment) {
code to be executed;
}
//=========
<?php
for ($a = 0; $a < 6; $a++) {
echo "Value of a : ". $a . "<br />";
}
?>
Цикл for в примере выше сначала устанавливает переменную $a равной 0, затем проверяет условие ($a < 6). Если условие верно, то запускается код. После этого происходит инкрементирование переменной $a ($a++).
Цикл foreach
Цикл foreach работает только с массивами, и используется для прохождения по каждой паре ключ/значение в массиве.
foreach (array as $key => $value) {
code to be executed;
}
// Здесь при каждой итерации будет дополнительно присваивать текущий ключ элемента к переменной $key.
<?php
$names = array("John", "David", "Amy");
foreach ($names as $name) {
echo $name.'<br />';
}
?>
// Выведет каждую позицию с новой строки
//John
//David
//Amy
// Якщо масив двомірний тоді запуускаєм форіч в середені батькіськаго форіч
foreach ($_POST as $item) {
foreach ($item as $subitem) {
$result[] = $subitem;
}
}
//Додати багатовимірний масив в БД:
foreach($keyimg as $k => $v) {
foreach($v as $key => $val) {
$arr_res[$key][$k] = $val;
}
}
//сам Запит - INSERT INTO `table`(`name`, `text`, `img`, `tegs`) VALUES ('.....')
$query = "INSERT INTO `table`(`name`, `text`, `img`, `tegs`) VALUES ('";
foreach ($name as $key=>$name_val){
$query .= $name_val.','.$text[$key].','.$img[$key].','.tegs[$key];
}
$query .= "')";
Як цикл форіч і фор використовувати в штмл шаблонах?
//Використали функцію " list range(int $low, int $high) " Яка генерить масив для швидкого проходження по ньому циклом foreach:
<table>
<?php foreach (range(1,10) as $i) { ?>
<tr>
<td><?= $i ?></td>
</tr>
<?php } ?>
</table>
<table>
<?php for ($i = 1; $i<=10; $i++) { ?>
<tr>
<td><?= $i ?></td>
</tr>
<?php } ?>
</table>
//Ці два цикла виведуть один і той же результат:
<table>
<tr>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>3</td>
</tr>
<tr>
<td>4</td>
</tr>
<tr>
<td>5</td>
</tr>
<tr>
<td>6</td>
</tr>
<tr>
<td>7</td>
</tr>
<tr>
<td>8</td>
</tr>
<tr>
<td>9</td>
</tr>
<tr>
<td>10</td>
</tr>
</table>
Оператор switch:
switch немедленно отправляется к соответствующему case, и прекращает оценивать все другие условия, которые потребуются в цепочке if-else.
// 1-й спосіб запису switch
$a = 3;
switch($a)
{
case 1: echo "додавання"; break;
case 2: echo "віднімання"; break;
default: echo "дія по замовчуванню"; break;
}
// 2-й спосіб запису switch
$a = 3;
switch($a)
case 1: echo "додавання"; break;
case 2: echo "віднімання"; break;
default: echo "дія по замовчуванню"; break;
endswitch
Ключевое слово break, которое следует за каждым case, используется для предотвращения автоматического перехода в следующий сектор case. Если вы забудете указать выражение break;, то PHP автоматически продолжит выполняться через последующие выражения case, даже если они не соответствуют выражению.
Как вернуть switch из функции - смотреть
В чем разница между switch и elseif?
В операторе switch выражение вычисляется один раз и этот результат сравнивается с каждым оператором case. В выражении elseif, выражение вычисляется снова. Если ваше условие более сложное, чем простое сравнение и/или находится в цикле, конструкция switch работает быстрее. Используем switch когда много условий!
Оператор break
Оператор break заканчивает текущий for, foreach, while, do-while или switch и продолжает выполнять программу со строки, расположенной сразу после цикла.
Оператор break во внешней части программы (т.е., не в управляющем цикле) остановит скрипт.
<?php
$x=1;
switch ($x) {
case 1:
echo "One";
case 2:
echo "Two";
case 3:
echo "Three";
default:
echo "No match";
}
?>
//Выведет: OneTwoThreeNo match
* Если оператор break отсутствует, то код продолжает выполняться.
Оператор continue
При использовании внутри структуры цикла, оператор continue позволяет пропустить то,
что осталось от текущей итерации цикла и перейти к следующей. Затем выполнение продолжается с подсчета условия и происходит переход к началу следующей итерации.
Следующий пример пропускает четные числа в цикле for:
<?php
for ($i=0; $i<10; $i++) {
if ($i%2==0) {
continue;
}
echo $i . ' ';
}
?>
//Выведет: 1 3 5 7 9
Вы можете использовать оператор continue со всеми цикличными структурами.
в 8 версії PHP з'явився вираз - match:
// 1-й спосіб запису match
$a = 2;
match($a)
{
1 => $operation = "сложение",
2 => $operation = "вычитание",
default => $operation = "действие по умолчанию",
};
echo $operation;
// 2-й спосіб запису match
$a = 2;
$operation = match($a)
{
1 => "додавання",
2 => "віднімання",
default => "действие по умолчанию",
};
echo $operation;
// Приклад використання конструкції match:
$food = 'cake';
$return_value = match ($food) {
'apple' => 'На столі лежить яблуко',
'banana' => 'На столі лежить банан',
'cake' => 'На столі стоїть торт',
};
var_dump($return_value);
//Результат string(35) "На столі стоїть торт"
Документація на офіційному сайті - глипнути