Работа вместе с HTML. Вложенные if. Конструкция elseif. Несколько if. Конструкция switch-case. Цикл foreach
Работа вместе с HTML PHP устроен таким образом, что его можно использовать в одном файле с HTML. Представьте, что у нас возникает такая задача: если пользователь авторизован - вывести его логин, иначе ссылку на авторизацию. Ее можно решить, смешивая PHP код и HTML код вместе. Посмотрите примеры: <? php $a = true; if ($a) { //Данный HTML код будет виден на экране только если $a равно true echo '< p> Здесь выведем какой-то HTML! < /p> '; } ? > Однако, очень часто это может оказаться неудобным, особенно если размеры HTML кода очень большие. Поэтому можно воспользоваться следующим приемом с разрывом PHP: <? php //Пример на работу вместе с HTML $a = true; if ($a) { /* Мы оборвали PHP, но HTML код ниже все равно будет виден на экране только если $a равно true. */ ? > < p > Здесь выведем какой - то HTML! < / p > <? php /* Здесь мы продожаем PHP, открыв скобку <? php и закрываем фигурную скобку от ифа. */ } ? > Вложенные if Предположим, нам необходимо спросить у PHP такую вещь: если переменная $a пуста, то вывести 'Введите $a', если не пуста, то проверить - больше нуля $a или нет. Если больше нуля - то вывести 'Больше нуля! ', если меньше - вывести 'Меньше нуля'. Одной конструкцией if здесь не обойтись, нужно использовать две таким образом, чтобы одна была внутри другой: <? php if (empty($a)) { //если переменная $a пуста echo 'Введите $a! '; } else { //если переменная $a НЕ пуста if ($a > 0) { //спрашиваем, больше ли нуля переменная $a echo 'Больше нуля! ';
} else { echo 'Меньше нуля! '; } } ? > Конструкция elseif Недостатком конструкции предыдущего примера является большое количество фигурных скобок. Поэтому была изобретена специальная конструкция elseif (пишется слитно! ), которая представляет собой одновременно и else, и начало вложенного if: <? php //Решение предыдущей задачи через конструкцию elseif if (empty($a)) { echo 'Введите $a! '; } elseif ($a > 0) { //одновременно выполняется else для empty($a) и спрашивается больше ли $a нуля echo 'Больше нуля! '; } else { echo 'Меньше нуля! '; } ? > Можно использовать несколько elseif, но злоупотреблять этим не стоит (лучше будет воспользоваться конструкцией switch-case, о которой ниже). Несколько if Пусть у нас есть такая задача: сайт поддерживает 3 языка - русский, английский, немецкий. Переменная $lang может принимать 3 значения - 'ru', 'en' и 'de'. В зависимости от значения переменной $lang следует вывести фразу на одном из языков. Решение: можно было бы воспользоваться вложенными ифами или elseif. Выглядело бы это примерно так: <? php //Решение задачи через elseif – не самое удачное if ($a == 'ru') { //фраза на русском echo 'Русский текст'; } elseif ($a == 'en') { //фраза на английском echo 'Английский текст'; } elseif ($a == 'de') { //фраза на немецком echo 'Немецкий текст'; } ? > Такое решение не слишком красивое - блок else здесь не нужен! Проще всего будет написать не один длинный if с несколькими else, а несколько if вообще без else: <? php //Решение задачи через несколько if – оно намного лучше if ($a == 'ru') { //фраза на русском echo 'Русский текст'; } if ($a == 'en') { //фраза на английском echo 'Английский текст'; } if ($a == 'de') { //фраза на немецком echo 'Немецкий текст';
}
/* В данном коде сработает только один из ифов, так как $a может иметь только одно из значений */ ? > Однако, это решение тоже не слишком удобно. Представьте, что у вас будет не три языка, а 10 - вам придется написать 10 конструкций if. Для таких случаев существует конструкция switch-case. Конструкция switch-case Конструкция switch-case представляет собой альтернативу if-else, ее рекомендуется использовать в случае множественного выбора (например, 10 различных языков, как в нашей задаче). Изучите ее синтаксис: <? php switch ($переменная) { case 'значение1': здесь код, который выполнится в случае, если переменная имеет значение1; break; case 'значение2': здесь код, который выполнится в случае, если переменная имеет значение2; break; case 'значение3': здесь код, который выполнится в случае, если переменная имеет значение3; break; default: этот код выполнится в случае, если переменная не совпала ни с одним значением; break; } ? > Решим нашу задачу с тремя языками с помощью данной конструкции: <? php switch ($lang) { case 'ru': echo 'Русский текст'; break; case 'en': echo 'Английский текст'; break; case 'de': echo 'Немецкий текст'; break; default: echo 'Данный язык не поддерживается'; break; } ? > . Цикл foreach Цикл foreach используется для прохождения по всем элементам массива. Синтаксис такой: пишется ключевое слово foreach, а после него круглые скобки ( ). В этих скобках указывается переменная, в которой лежит массив, потом слово as, а после него - переменная, в которую при каждом проходе цикла будет ложится элемент массива. К примеру, это может выглядеть так - foreach($arr as $elem), где $arr - это массив, а в переменную $elem будут ложиться элементы массива. Имя переменной $elem вы придумываете сами в момент создания цикла - какое придумаете, в ту переменную и будут попадать элементы массива.
После команды foreach() должны идти фигурные скобки {}. Код, который лежит в этих скобках, называется телом цикла. Этот код будет выполняться столько раз, сколько проходов сделает цикл. А он сделает столько проходов, сколько элементов у нашего массива. Итак, синтаксис цикла foreach выглядит так: <? php foreach ($arr - имя_массива as $elem – переменная_для_элемента_массива) { /* Код, который находится между фигурными скобками будет повторяться столько раз, сколько элементов у массива. */ }? >Давайте решим следующую задачу: пусть дан массив $arr с пятью элементами, выведем столбец этих элементов с помощью цикла foreach. Будем при каждом проходе цикла выводить на экран (с помощью echo) текущий элемент массива (тот, что лежит в переменной $elem ), и ставить после него тег br, чтобы получался столбец элементов, а не строка: <? php $arr = [1, 2, 3, 4, 5]; //этот массив дан foreach ($arr as $elem) /* Код, который находится между фигурными скобками будет повторяться столько раз, сколько элементов у массива (то есть 5 раз). */ { /* В переменной $elem будет лежать элемент массива, каждый раз разный: сначала первый, потом второй... Имя этой переменной обязательно должно отличаться от названия массива! */ echo $elem. '< br> '; /* При каждом проходе цикла на экран будет выводится элемент массива, получится столбец элементов нашего массива $arr = [1, 2, 3, 4, 5]; Этот столбец будет выглядеть так: 1 2 3 4 5 */ }? >Цикл foreach - очень мощная и полезная вещь, его следует использовать в том случае, если вам необходимо выполнить какие-либо действия с каждым элементом массива по отдельности, например, возвести их в квадрат: <? php //Возведем в квадрат каждый элемент следующего массива: $arr = [1, 2, 3, 4, 5]; foreach ($arr as $elem) { /* В переменной $elem будет лежать элемент массива, каждый раз разный: сначала 1, потом 2... */ echo $elem * $elem; }? >Циклом foreach можно пробегать не только по обычному массиву, но и по ассоциативному. В таком случае после as следует указать такую конструкцию: $ключ => $элемент. В переменной $ключ будут хранится ключи, а в переменной $элемент - соответствующие этим ключам элементы.
Чтобы посмотреть на практике, как работать с ключами, давайте сделаем следующее - при каждом проходе цикла будем выводить на экран ключ массива и соответствующий ему элемент через дефис: <? php //Дан ассоциативный массив $arr: $arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5]; foreach ($arr as $key => $elem) { /* В переменной $elem будут лежать элементы массива сначала '1, потом 2 и так далее, а в переменной $key будут лежать ключи массива сначала 'a', потом 'b' и так далее: */ echo $key. '-'. $elem; //выведет: 'a-1', 'b-2', 'c-3' и так далее... }? >Если вам нужны только значения ассоциативного массива и не нужны ключи, то $ключ=> можно не писать: <? php //Массив ассоциативный, но ключи нам не нужны: $arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5]; foreach ($arr as $elem) { echo $elem; //выведет: '1', '2', '3' и так далее... }? >Фигурные скобки, так же, как и для if, можно не указывать - в этом случае цикл выполнит только одну строку под ним (это относится ко всем циклам, не только к foreach): <? php $arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5]; foreach ($arr as $elem) echo $elem; //выведет: '1', '2', '3' и так далее... echo 'hello'; //выведется после цикла? >Цикл foreach имеет альтернативный синтаксис: <? php //Фигурные скобки опущены, а цикл закрывается командой endforeach: $arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5]; foreach ($arr as $elem): //обратите внимание на двоеточие! echo $elem; //выведет: '1', '2', '3' и так далее... endforeach;? >Как и в случае с конструкцией if-else, мы можем разорвать скобки PHP внутри цикла, далее написать что-то на HTML и опять открыть скобки PHP – в этом случае HTML код внутри цикла повторится столько раз, сколько проходов сделает цикл (в случае foreach – это количество элементов массива): //Как работать с HTML (этого многие не знают, обратите внимание! ): <? php $arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5]; foreach ($arr as $elem) { //HTML код внутри цикла повторится 5 раз:? > <! -- Мы закрыли скобки PHP и теперь пишем на HTML, но в цикле! --> < p > {<? php echo $elem; ? > } < / p > <? php }? > //Альтернативный синтаксис (удобен при работе с html, так как не нужны фигурные скобки): <? php $arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5]; foreach ($arr as $elem): //< --- не забываем ставить двоеточие!? > < p > {<? php echo $elem; ? > } < / p > <? php endforeach;? >
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|