Задайте вопрос
Поиск по сайту

Содержание:

Глава1 - Основы.

  • Установка и настройка Denwer.
  • Знакомство с РНР.
  • Переменные.
  • Операторы.
  • Массивы и циклы
  • Функции.

  • Глава2 - Разработка web-сайтов и взаимодействие с MySql.
    Partner


    Массивы.



    Массивы в php это, если выразиться кратко, несколько переменных, объединенных под одну "крышу".

    Другими словами - это переменная с множеством ячеек.

    Например пользователь может нам прислать много своих данных - пароль, логин, e-mail, возраст и т.д.
    Что бы не заводить кучу разных переменных их все можно затащить в один массив. Как это делается?

    Все просто - реализуется это, как вариант, с помощью квадратных скобок []




    Что мы сделали? Мы создали массив $user[] с пятью ячейками и присвоили им различные значения.

    Возникает вопрос - как нам обращяться к той или иной ячейке?

    Если вручную не задать номера, пхп автоматически пронумерует ячейки, начиная с верху, с нуля.
    Т.е., например, что бы обратится к верхней ячейке нужно написать:



    Существует функция, которая считает все ячейки массива, напрмер если их там 65568, считать их конечно будет большой проблемой. Для этого и существует функция count()



    Еще одна удобная функция, которая выводит все значения всех ячеек массива print_r()



    Результат в браузере будет выглядеть так:



    Мы видим нумерацию наших ячеек и их значения. НО! Мы не видим какие типы переменных у нас там лежат, правда? Также мы не видим кол-во ячеек. Ну пять то мы можем посчитать, а если их та тысячи?

    На этот случай у нас есть замечательная функция var_dump()

    Которая и кол-во ячеек выведет и их типы.



    В браузере мы увидим все, что нам нужно!



    "А что будет если вручную пронумеровать ячейки" - спросите Вы? Сделаем так"



    Выдаст:



    Так происходит, потому что пхп нумерует ячейки, если часть не пронумерована, позициями СЛЕДУЮЩЕЙ ЗА НАИБОЛЬШЕЙ!

    Т.е. он смотрит сверху вниз, ага, первая пронумерована, вторая пронумерована, третья... нет, и он присваивает ей значение следующее за наибольшим, которое он уже прочитал. Наибольшее было 11, значит третью он нумерует 12, так же и с 46, т.к. 45 было наибольшее, что он увидел перед непронумерованной ячейкой.

    Массивы создавать можно и другим способом (что является более правильным) с помощью функции array()

    Давайте создадим точно такойже массив этим способом



    А пронумеровать ячейки в этой ситуации можно очень просто:



    Возникает одна проблемма. Если ячеек много, то нам трудно будет запомнить под каким номером, например, пароль, а под каким е-мейл. Для этого мы пропишем ячейкам не номера, а дадим им имена, тем самым мы создаем ассоциативный массив



    Многомерный массив.



    - это вложенный массив, т.е., скажем, в массиве пять ячеек, а в свою очередь в одной из них (или в нескольких или вообще во всех) лежит еще один массив (и так может быть до бесконечности).

    Так как же вложить одно в другое? Все как всегда на поверхности :-)



    Так мы вложили внутрь нашей переменной $name, которая сама находится внутри массива $user, еще один массив.

    Просто вместо значения одной из ячеек, как вариант, пишете массив. Вот и все! :-)

    Циклы.



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

    Согласитесь, очень удобно было бы как-то зациклить выполнение одного участка, чем писать одно и то же по нескольку раз.

    А уж если повторить код надо несколько тысяч раз, то без циклов никак не обойтись :-)

    Операторы инкремента и декремента.



    Смотрите слайд - там все вроде понятно.

    PRE - сначала значение изменяется, потом передается дальше на обработку.

    POST - сначала переменная отдается на обработку, а только потом изменяется.



    Примеры использования:



    Первые три строчки - это

    Т.е. сначала эхо выводит значение $a равное 1, а потом увеличивает $a на 1.

    Потом когда эхом $a вызывается повторно, она уже имеет значение 2

    Ну и вторые три строки - тоже самое, но наоборот.

    Цикл For.





    И так что это?

    В части А просто тупо выполняется то что Вы там напишете. Как правило, там инициализируется счетчик цикла, но не обязательно! Ну например мы там объявляем какую-то переменную и говорим - "Эта переменная будет счетчиком".

    В части В проверяется какое-то условие (в принципе тот же, если хотите, If). Проверяется истинность этого условия и если там true, php заходит в тело цикла и выполняет его, если false - вылетаем из цикла.

    Часть С точно так же как и в части А просто выполняется какое то выражение. Опять же как правило там мы изменяем наш счетчик - увеличиваем или уменьшаем значение.

    Итак, как все это работает, еще раз:

    Пхп заходит в часть A и делает все, что там написано. Сюда он попадает только один раз.

    Потом заходит в часть В и спрашивает там true или нет. Если да, то выполняются все команды цикла.

    Потом пхп поднимается в часть С и тоже выполняет все что там написано.

    Опять идет в часть В и опять спрашивает true там или не true.

    Если true все повторяется опять - выполняет тело, идет в С, идет в В и спрашивает опять.

    И так продолжается пока в части В не окажется False. После чего выкидывает из цикла.

    Давайте выполним задачу, что бы окончательно разобраться с циклом For.

    Необходимо в столбик вывести все числа от 1 до 50. Выполняем:



    Попробуйте сами составить подобный код и посмотрите, что у Вас получится :-)

    Цикл While.



    Вот синтаксис цикла и пример:



    Здесь все то же что в For только часть А мы выносим наверх, за пределы цикла, а часть С наоборот вставляем внутрь While

    Удобно использовать For когда мы точно знаем с какого по какое значение будет вертеться цикл, а While когда точно не определено сколько раз повторять код в теле.

    Давайте составим предыдущую задачу с использованием этого цикла:



    Вот и все премудрости :-)

    Управление циклами.



    Бывают ситуации, когда нам не нужно, что бы цикл прошел целиком. Т.е. иногда нужно, что бы при определенных условиях мы вылетели из тела цикла.

    Поэтому у нас есть возможность гибко влиять на работу циклов и управлять ими :-)

    Первый способ использование уже известного из свитча оператор break



    Т.е. в браузер выведется

    1234

    Потому, что мы поставили условие, что при $i==5 мы вылетаем из цикла командой break

    Второй вариант это использование оператора continue



    Здесь мы поставили условие, что бы при $i==5 нас перебрасывало обратно к условию цикла.

    Соответственно когда php увидит соответствие $i==5 он перебросит нас в часть В и цикл пойдет дальше, не выведя print $i которая в данный момент была равна пяти. И в браузере будет:

    12346789 и так далее - без пятерки.

    Как поведет себя оператор break если у нас будет вложенный цикл? Например есть цикл while внутри котрого еще один цикл while



    В этой ситуации, когда пхп наткнется на оператор break он выкинет нас из одного цикла - внутри которого был брейк



    Но останется в родительском цикле - первом.

    Таких вложенностей может быть сколь угодно много. И чтобы указать php на сколько вложенностей цикла нам необходимо выйти (сколько раз сделать брейк), мы пишем через пробел число, котрое означает на сколько вложенностей нам необходимо выйти, например



    Тем самым выходим из циклов!

    То же самое с continue

    НО!!! Не бывает худо без добра, как говорится :-)

    Число, которое определяет на сколько уровней мы должны выйти, должно быть не больше кол-ва вложенностей цикла. Т.е. если у Вас один цикл вложен в другой и все! число не может быть больше двух - иначе это приведет у ОШИБКЕ!!!

    Запомните это!

    Цикл Do While.



    У циклов For и While есть один ньюанс - и тот и другой могут вообще никогда не начаться, а нам НУ ОЧЕНЬ нужно хотя бы одно выполнение цикла в независимости от условия, например



    Эти циклы никогда не начнут выполняться, потому что изначально $i=100 а в условии первого цикла (что бы он начал выполнятся) должно быть $i<50

    Понятно,да?

    Так вот что бы цикл стопроцентно выполнился хотя бы один раз - есть цикл Do While или While c постусловием



    Т.е на следующем пример ниже, php сначала обязательно зайдет в тело Do выполнит все выражения как минимум один раз, а после зайдет в тело While если условия будут иметь значения true

    Если будет false пхп выйдет из цикла, НО! Один раз он его уже выполнил.



    Итак, подводя итог циклам, сделаем одно задание.

    Сделайте его самостоятельно, а уж потом смотрите как все должно быть - без практики php не понять!!!

    Задание:

    Используя циклы отрисуйте таблицу умножения в виде HTML-таблицы на следующих условиях:

    a. Число столбцов должно быть равно значению переменной cols
    b. Число строк должно быть равно значению переменной rows
    c. Ячейки на пересечении столбцов и строк должны содержать значения, являющиеся произведением порядковых номеров столбца и строки

    Маленький совет для начинающих и не только - ВСЕГДА сначала все набросайте на бумаге.

    Например что, где и как писать! А потом пишите код - это ОЧЕНЬ помогает!

    И еще, в этом примере Вы должны знать как строятся таблицы посредством языка разметки html



    Попробуйте вбить код в свой файл и, сохранив, Вы получите таблицу умножения. Только предварительно задайте значения переменным $cols и $rows

    Цикл ForEach.



    Этот цикл специально для работы с массивами

    Как вывести массив с помощью цикла? Вот пример:



    Что здесь?

    Читаю последовательно!

    Есть массив из пяти переменных

    Начинается цикл фор:

    Для $i равной 0 и $cnt=count($user)//результат кол-во переменных в массиве - т.е. число

    Начинается блок В: Если $i<$cnt - выполняем тело цикла - выводим ячейку массива, равную $i в данный момент.

    Дальше увеличиваем $i на 1 и снова проверяем условие и т.д.

    Так выведем весь массив.

    НО! Никуда не пропадющее НО! :-)

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

    Как вывести, если все вот так:



    А уж и подавно если массив ассоциативный



    Для вывода такого массива в цикле есть конструкция ForEach



    В скобки форич мы вствляем наш массив, пишем волшебное слово as :-) и придумываем переменную - какую захотите!

    Дальше выводим эту переменную эхом

    Все!

    Т.е. что будет? Php сам зайдет в наш массив и за каждый проход тела цикла - этерацию, будет брать значения из ячеек массива и закидывать их в переменную, которую Вы создали - в моем случае $v

    Соответственно все значения переменных массива выведутся эхом ПОСЛЕДОВАТЕЛЬНО!

    Попробуйте сами вывести свой массив циклом ForEach и Вы все увидите.

    Давайте посмотрим, как вариант, применение Этого цикла! и разберем

    как создать меню для сайта.



    Обычно меню хранится в базе данных, xml файле еще где-то, но так как мы пока этого еще, будем считать, не знаем, мы будем хранить наше меню в массиве.

    Меню, естественно, должно быть динамическим, т.е. php должен отрисовывать его на ходу, а не хтмл'ем все это писать, особенно если оно большое.

    Как все это будет выглядеть? конежно же отрисовываем форич! Ячейками массива (ключами) будут ссылки, которые пользователь будет нажимать, а в значениях ячеек уже будут непосредственно лежать файлы, куда мы идем при нажатии на ссылку.

    И меню мы сделаем вертикальное!

    И так приступим



    И получаем наше замечательное меню! :-)



    Только точки видны т.к. мы использовали список, а от них легко избавляемся (из хтмл знания :-) )



    Вот мы рассмотрели основы массивов и циклов! Проработайте все сами! Поэкспериментируйте с различными условиями. Двинемся дальше :-)

    Наверх Предыдущая страница Следующая страница