logo
Vvedenie_v_Veb_programmirovanien_2 / Vvedenie_v_Veb_programmirovanien_2

Операторы управления

PHP содержит все основные конструкции языка C++: условные операторы if…else (elseif), switch, четыре вида операторов цикла и др.

Оператор выбора if имеет следующий синтаксис:

if (boolexp) { /*операторы, выполняемые при boolexp=true*/} //1

else { /*операторы, выполняемые при boolexp=false */ } //2

Если выражение boolexp принимает значение true, то выполняется группа операторов 1, иначе – группа операторов 2. При отсутствии оператора else операторы, расположенные после окончания оператора if (строка 2), выполняются вне зависимости от значения булевского выражения оператора if. Допустимо также использование конструкции-лесенки if {} else if {}.

В следующем примере показана возможность отключения PHP, чтобы вывести без интерпретации часть html – документа.

<?php //pr8.php

$boolexp=true;

if ($boolexp) : ?> //отключение php

<img src="img/A_A.jpg" >

<?php endif; //включение php

$c=5;

echo "c=", $c=$c or 4, "<br>";//1

?>

Оператор if() при этом надо закончить оператором endif (аналогично endwhile, endfor). Создаваемый после PHP-интерпретации HTML- документ, пересылаемый браузеру, будет выглядеть следующим образом:

//отключение php

<img src="img/A_A.jpg" >

c=1<br>

Другой вариант состоит в использовании фигурных скобок вместо двоеточия:

<?php //pr81.php

$bexp=true;

if ($bexp) { ?> //отключение php

<img src="img/A_A.jpg" >

<?php } //включение php

$c=5;

echo "c=", $c=$c or 4, "<br>";//1

?>

В PHP существует четыре вида циклов, первые три из них аналогичны соответствующим циклам в языке С++:

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

while (boolexp) { /*операторы, выполняемые при boolexp=true */ }

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

do { /*операторы, выполняемые при boolexp=true */ }

while (boolexp);

for(exp1; boolexp; exp3){ /*операторы*/ } // цикл с параметрами

Здесь по традиции exp1 – начальное выражение, boolexp – условие выполнения цикла, exp3 – выражение выполняемое в конце итерации цикла (как правило, это изменение начального значения). Циклы выполняются, пока булевское выражение boolexp равно true.

Eще один цикл, упрощающий доступ к массивам:

foreach($array as[$key=>] $value){ /*операторы*/ }

При проходе каждого элемента массива в переменную $key помещается индекс данного элемента, а в переменную value – значение элемента. Индекс $key может отсутствовать.

Рассмотрим пример вывода элементов массива:

<?php //pr9.php

$massiv = array('one','two','three');

foreach($massiv as $value)echo $value;//onetwothree

?>

В следующем примере имеются нарушения правил работы с массивом.

<?

$a[]=1;

$a[]=2;

$a[]=4;

$a[]=8;

foreach ($a as $i) {$s=$s+$a[$i];}

echo ($s);

?>

Ответ: $s=6

Что неправильно, как-бы игнорируется первый и последний элементы.

Аналогично C++ используется оператор выбора варианта switch:

switch(exp) {

case exp1:{/*операторы*/}

break;

case expN:{/*операторы*/}

break;

default: {/*операторы*/}

}

При совпадении значения exp с одним из значений, указанным в case, выполняется соответствующий вариант и далее подряд все блоки операторов до тех пор, пока не встретится оператор break, Значения exp1,…, expN могут быть константами не только целого, но и вещественного или стрингового типа в отличие от C++.

Для выхода из циклов используются оператор прерывания цикла break и оператора прерывания итерации цикла continue.

<html>

<head></head>

<body>

<p>в прямоугольной матрице переставить столбцы в порядке возрастания суммы их элементов</p>

<?php //pr10.php

$matrix = array();

$n = 3;

$m = 5;

for($i=0;$i<$n;$i++)

for($j=0;$j<$m;$j++){

$matrix[$i][$j] = rand(0,9);

}

for($i=0;$i<$n;$i++){

for($j=0;$j<$m;$j++){

echo($matrix[$i][$j]);

echo(" ");

}

echo("<br>");

}

$sum = array();

for($j=0;$j<$m;$j++){

$sum[$j] = 0;

for($i=0;$i<$n;$i++){

$sum[$j]+=$matrix[$i][$j];

}

}

echo("<br>");

for($i=0;$i<$m;$i++){

echo($sum[$i]);

echo(" ");

}

for($i=0;$i<$m-1;$i++)

for($j=0;$j<$m-1-$i;$j++){

if($sum[$j]>$sum[$j+1]){

$temp = $sum[$j];

$sum[$j] = $sum[$j+1];

$sum[$j+1] = $temp;

for($k=0;$k<$n;$k++){

$temp = $matrix[$k][$j];

$matrix[$k][$j] = $matrix[$k][$j+1];

$matrix[$k][$j+1] = $temp;

}

}

}

echo("<br>");

echo("new matrix:");

echo("<br>");

for($i=0;$i<$n;$i++){

for($j=0;$j<$m;$j++){

echo($matrix[$i][$j]);

echo(" ");

}

echo("<br>");

}

?>

</body>

</html>