Управляющие конструкции php: elseif и for


Сегодня на примере программы обработчика для урока Флажки checkbox и свойства таблицы colspan и rowspan рассмотрим управляющие конструкции php, а именно условные операторы elseif, и оператор цикла for.

Сначала немного теории:

Оператор if позволяет выполнять фрагменты кода в зависимости от условия. Структуру оператора if можно представить следующим образом:

if (условие) блок кода

оператор используется для выполнения блока кода, когда выполняется условие (true). В противном случае блок кода игнорируется. Если блок кода содержит несколько команд, то он должен быть заключен в фигурные скобки { }.

Оператор else расширяет if на случай, когда условие выполняется (true), или для выполнения другого блока кода, когда условие не выполняется (false).
Структура оператора if else следующая:

if (условие) блок кода else блок кода1

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

if (выражение) блок_выполнения elseif(выражение1) блок_выполнения1 ... else блок_выполненияN

Операторов elseif может быть несколько в одном if блоке. Elseif утверждение будет выполнено, только если предшествующее if условие является False, все предшествующие elseif условия являются False, а данное elseif условие – True.

Оператор цикла for это конструкция, позволяющая выполнять повторяющиеся действия в зависимости от условия.
Структура оператора for:

for (выражение1; выражение2; выражение3) {блок выполнения}

Первое выражение1 вычисляется один раз в начале цикла. В начале каждой итерации вычисляется выражение2. Если оно является True, то цикл продолжается и выполняются все команды блока выполнения. Если выражение2 вычисляется как False, то исполнение цикла останавливается. В конце каждой итерации (т.е. после выполнения всех команд блока выполнения) вычисляется выражение3.

Каждое из выражений 1, 2, 3 может быть пустым. Если выражение2 является пустым, то это значит, что цикл должен выполняться неопределенное время (в этом случае PHP считает это выражение всегда истинным), а цикл можно останновить, используя оператор break.
В третье выражение конструкции for можно записывать через запятую сразу несколько простейших команд.

Можно опустить все три выражения. Тогда просто не будет задано начальное значение счетчика и оно не будет изменяться каждый раз в конце цикла. Все эти действия можно записать в виде отдельных команд либо в блоке выполнения, либо перед циклом.

Взгляните на код программы обработчика. Она состоит из уже знакомых вам конструкций <<<HERE HERE; , которые были рассмотрены в посте Конструкция <<<HERE HERE; и вывод кода HTML в PHP, нескольких условных операторов elseif и оператора цикла for.

Сначала в перменную $tr2 с помощью конструкции <<<HERE HERE; , я заношу HTML код второй строки таблицы, которая остается неизменной при исследовании свойства colspan.

Свернуть код:
$tr2 = <<<HERE
  </td>
</tr>
 <tr>
  <td height='50' width='100' bgcolor='#336699' valign='bottom'> <center>2x1</center>
  </td>
  <td width='100' bgcolor='#FFCC33'> <center>2x2</center>
  </td>
  <td width='100' bgcolor='#336699' valign='bottom'> <center>2x3</center> </td>
  </td>
 </tr>
</table>
HERE;

Затем с помощью условного оператора if else проверяю для какого свойства colspan или rowspan необходимо проводить проверку.
Если выбрано свойство colspan, тогда с помощью нескольких условных операторов elseif и составного условия я проверяю какие ячейки таблицы были выбраны для объединения, и в зависимости от выбора вывожу с помощью конструкции <<<HERE HERE; ,

if ($type == "col"){ // Начинаем исследовать свойство colspan
if ($val[1] == "" && $val[2] != "" && $val[3] != ""){
print <<<HERE
<table>
<tr>
    <td height="50" width="100" bgcolor="#FFCC33" valign="top" > <center>1x1</center>
    </td>
    <td width="100" bgcolor="#336699" colspan="2"> <center>1x2</center>
$tr2
HERE;
}
else if ($val[1] != "" && $val[2] != "" && $val[3] == ""){
print <<<HERE
<table>
<tr>
    <td height="50" width="100" bgcolor="#FFCC33" valign="top" colspan="2"> <center>1x1</center>
    </td>
    <td width="100" bgcolor="#336699"> <center>1x2</center>   
     $tr2
HERE;
}
else if ($val[1] != "" && $val[2] != "" && $val[3] != ""){
print <<<HERE
<table>
<tr>
    <td height="50" width="100" bgcolor="#FFCC33" valign="top" colspan="3"> <center>1x1</center>
    $tr2
HERE;
}
else {
print <<<HERE
<table>
<tr>
    <td height="50" width="100" bgcolor="#FFCC33" valign="top" > <center>1x1</center>
    </td>
    <td width="100" bgcolor="#336699"> <center>1x2</center>
     </td>
<td width="100" bgcolor="#FFCC33" valign="top"> <center>1x3</center>
$tr2
HERE;
}
}//Заканчиваем исследование свойства colspan

Если же было выбрано свойство rowspan, то формирую массив ячеек таблицы $td[ ], состоящий из шести элементов (по количеству ячеек в таблице). Затем с помощью простого оператора if проверяю какие столбцы были выбраны для исследования и переопределяю необходимые элементы массива ячеек таблицы $td[ ]. И наконец с помощью операторов echo и оператора цикла for, вывожу поочередно строки таблицы.в которой содержится HTML код первой строки таблицы и переменную $tr2, в которой содержится вторая строка.

else { //Исследуем свойство rowspan
$td[1] = "<td height='50' width='100' bgcolor='#FFCC33' valign='top' > <center>1x1</center></td>";
$td[2] = "<td height='50' width='100' bgcolor='#336699'  > <center>1x2</center></td>";
$td[3] = "<td height='50' width='100' bgcolor='#FFCC33' valign='top'  > <center>1x3</center></td>";
$td[4] = "<td height='50' width='100' bgcolor='#336699' valign='bottom' > <center>2x1</center></td>";
$td[5] = "<td height='50' width='100' bgcolor='#FFCC33' > <center>2x2</center></td>";
$td[6] = "<td height='50' width='100' bgcolor='#336699' valign='bottom' > <center>2x3</center></td>";
//Переопределяем значения ячеек если отмечены
if ($val[1] != ""){
$td[1] = "<td height='50' width='100' bgcolor='#FFCC33' valign='top' rowspan='2' > <center>1x1</center></td>";
$td[4] = "";
}
if ($val[2] != ""){
$td[2] = "<td height='50' width='100' bgcolor='#336699'  rowspan='2'> <center>1x2</center></td>";
$td[5] = "";
}
if ($val[3] != ""){
$td[3] = "<td height='50' width='100' bgcolor='#FFCC33' valign='top' rowspan='2'> <center>1x3</center></td>";
$td[6] = "";
}
echo "<table height='100'><tr>";
 for ($i = 1; $i < 4; $i++){
 echo $td[$i];
 }
echo "</tr><tr>";
 for ($i = 4; $i < 7; $i++){
 echo $td[$i];
 }
echo "</tr></table> ";
}

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

Автор: Сергей Зарубин

Дата: 2011-05-23

Колличество просмотров: 4284

Нравится

Комментарии к заметке:



Добавить новый комментарий


Введите число с картинки:

captcha