Поиск

Цикл while

Как было упомянуто в начале этой главы, циклы используются для многократ ного выполнения фрагмента кода. Можно создать ниспадающее меню, состоя щее из дней месяца (цифры от 1 до 31). Допустимо распечатывать все значе ния массива. В этих и во многих других случаях удобно использовать цикл. Первый из двух существующих в РНР циклов цикл while выполняет со ответствующий блок операторов до тех пор, пока заданное условие истинно. Он проверяет значение условия перед каждой итерацией. Как только условие становится ложным, программа покидает цикл.

while (condition) {
statement (s) ;

Для демонстрации цикла whi le мы создадим сценарий, который динамичес ки генерирует ниспадающее меню даты (месяц, день, год) для HTMLформы.

Хотя форма сама по себе не выполняет никаких операций, вы увидите, как ис пользовать РНР для быстрого создания и усовершенствования стандартного элемента HTMLформы.

Использование цикла while

  1. Создайте новый PHPдокумент в текстовом редакторе.
  2. <HTMLxHEADxTITLE>Select Menu</TITLEx/HEADxBODYx?php
  3. Задайте текущий год с помощью функции date ( ) .
  4. $Year = date ( " Y " ) ;

    При поступлении в функцию date ( ) значения "Y" будет возвращаться теку щий год. Мы используем это значение для вывода в меню текущего года и сле дующих десяти лет. В этом случае не придется менять форму каждый год.

  5. Создайте HTMLформу, у которой будет ниспадающее меню с месяцами.
  6. print ("<FORM ACTION="$PHP_SELF" METHOD=POST>n");
    print ("Select a month: <BR>n" ),
    print ("<SELECT NAME=MonthxOPTION>Choose Qne</OPTION>n");
    print ("<OPTION VALUE=January>January</OPTION>n");
    print ("<OPTION VALUE=February>February</OPTION>n");
    print ("<OPTION VALUE=March>March</OPTIONSn");
    print ("<OPTION VALUE=April>April</OPTION>n"); '
    print ("<OPTION VALUE=May>May</OPTION>n");
    print ("<OPTION VALUE=June>June</OPTION>n");
    print ("«DPTION VALUE=July>July</OPTION>n");
    print ("<OPTION VALUE=August>August</OPTION>n");
    print ("<OPTION VALUE=September>September</OPTION>n");
    print (VOPTION VALUE=October>October</OPTION>n");
    print ("<OPTION VALUE=November>November</OPTION>n");
    print ("<OPTION VAL0E=December>December</OPTION>n");
  7. С помощью цикла while создайте ниспадающее меню с днями.
  8. print ("<P>Select a day:<BR>n");
    print ("<SELECT NAME=DayxOPTION>Choose One</OPTION>n");
    $Day = 1;
    while ($Day <= 31} { •
    print ("<OPT10N VALUE=$Day>$Day</OPTION>h");
    $Day++;
    print ("</SELECT>n");

    Первым делом присвоим переменной $Day значение 1. Это должно быть сделано до вызова цикла. Затем будет происходить автоматическая проверка того, равна ли переменная $Day 31 или нет. Если да, то значение $Day .будет напечатано как опция в меню дней, а затем значение $Day увеличится на 1. Этот процесс будет продолжаться, пока значение не составит 32. Тогда произойдет выход из цикла и начнется выполнение дальнейших инструкций сценария.

  9. С помощью другого цикла while создайте ниспадающее меню с годами.
  10. print ("<P>Select a year:<BR>n");
    print ("<SELECT NAME=YearxOPTION>Choose One</OPTION>n");
    $EndYear = $Year + 10;
    while ($Year <= $EndYear ) {
    print ("<OPTION VALUE=$Year>$Year</OPTION>n");
    $Year++;
    } '
    print ("</SELECT>n");

    В ниспадающем меню будут сгенерированы текущий год и последующие де сять лет. Первый был присвоен переменной $Year ранее. Последний год, $EndYear, получает значение переменной $Year плюс ГО (это значение легко изменить для печати 5 или 15 лет). Цикл «знает», что, пока значение перемен ной SYear меньше или равно значению переменной $EndYear, он должен печа тать значение переменной SYear и затем увеличивать его на единицу.

  11. Создайте кнопку Submit, закройте форму, РНР и HTML.
  12. print ("<PxINPUT TYPE=SUBMIT NAME=SDBMIT VALUE="Go!">
    </FORM>n") ; ?></BODYx/HTML>

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

  13. Сохраните страницу как select.php (листинг 6.9), загрузите ее на сервер и протестируйте в браузере (рис.).
  14. Листинг 6.9 т Два цикла while быстро сгенерируют два ниспадающих меню (см. рис. ). С помощью функции date ( ) мы разработаем цикл по годам. Он не позволит устареть нашему сценарию.

    1 <HTML>
    2 <HEAD>
    3 <TITLE>Select Menu</TITLEx/HEAD>
    4 <BODY>
    5 <?php
    6 $Year = date ("Y");
    7 // Создание формы.
    8 print ("<FORM ACTION="$PHP_SELF" METHOD=POST>n");
    9 // Создание меню для выбора месяца.
    10 print ("Select a month:<BR>n");
    11 print ("<SELECT NAME=MonthxOPTION>Choose One</OPTION>n");
    12 print ("<OPTION VALUE=January>January</OPTION>n");
    13 print ("<OPTION VALUE=February>February</OPTION>n");
    14 print ("<OPTION VALUE=March>March</OPTION>n");
    15 print (VOPTION VALUE=April>April</OPTIGN>n");
    16 print ("<OPTION VALUE=May>May</OPTION>n");
    17 print ("<OPTION VALUE=June>June</OPTION>n");
    18 print ("<OPTION VALUE=July>July</OPTION>n");
    19 print ("«DPTION VALUE=August>August</OPTION>n");
    20 print ("«DPTION VALUE=September>September</OPTION>n");
    21 print ("«DPTION VALUE=October>October</OPTION>n");
    22 print ("<OPTION VALUE=November>November</OPTION>n");
    23 print ("<OPTION VALUE=Deceinber>December</OPTION>n") ;
    24 print ("</SELECT>n");
    25 // Создание меню для вывода дня. .
    26 print ("<P>Select a day:<BR>n");
    27 print ("<SELECT NAME=DayxOPTION>Choose Qne</OPTION>n");
    28 $Day = 1;
    29 while ($Day <= 31) {
    30 print ("<OPTION VALOE=$Day>$Day</OPTIOM>n");
    31 $Day++;
    32 }
    33 print ("</SELECT>n");
    34 // .Создание меню для вывода года.
    35 print ("<P>Select a year:<BR>n");
    36 print ("<SELECT NAME=YearxOPTION>Choose One</OPTION>n");
    37 $EndYear = $Year + 10;
    38 while ($Year <= $EndYear ) {
    39 print ("<OPTION VALOE=$Year>$Year</OPTION>n");
    40 $Year++;
    41 }
    42 print ("</SELECT>n");
    43 print ("<PxINPUT TYPE=SUBMIT NAME=SUBMIT VALUE="Go!"></FORM>n");
    44 ?>
    45 </BODY>
    46 </HTML>

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

    do {
    statement(s);
    } while (condition);

    Дважды подумайте о том, какие элементы стоит включить в цикл, а какие нужно вынести за его пределы. Невозможность увеличить значение переменной SDay или $Year в цикле создаст бесконечный цикл (например, день всегда будет мень ше или равен 31). В противоположность этому использование в цикле тэгов <SELECT> приведет к созданию многочисленных ниспадающих меню.

    Так же, как и условная конструкция if, цикл while может быть размещен на од ной строке, если имеется всего одна инструкция. Однако лучше не делать этого.