программирование на PHP
Bullet (black) Email иконка RSS иконка
  • Урок 7. Массивы в PHP

    Июль 18th, 2008 Александр 19 Комментариев

    Введение

    Наверняка начинающие программисты задаются вопросом: “Что такое массив? и как с ним работать?”. Действительно, поначалу присутствует полная неразбериха и непонимание. В этом уроке я попытаюсь навести порядок в вашей голове, и приведу несколько примеров по работе с массивами в php. В предыдущих уроках мы частично рассматривали работу с массивами, но сейчас я предлагаю резюмировать информацию, и сделать так чтобы она хорошо усвоилась вами.

    Массивы

    На самом деле массив в PHP – это упорядоченное отображение, которое устанавливает соответствие между значением и ключем. Т.е. это определенный набор значений, у которого имеется свой идентификатор (key) и присвоенное ему значение (value). Вспомните как вы заполняете анкету? Там присутствуют обязательные поля фамилия,имя, отчество, год рождения и т.д.

    В примере все становиться ясно, здесь слово фамилия является ключом, в котором содержится ваша фамилия, например Петров.

    Пример:

    Анкета

    • фамилия:Петров
    • имя:Алексей
    • год рождения:1988

    А теперь пример, как можно создать массив в php используя такие же данные. Создать можно двумя способами:

    1. С указанием ключа:

    [cc lang="php"]

    $anketa = array("family"=>“Петров”,”name”=>”Алексей”,”year”=>”1988″);

    ?>
    [/cc]
    Теперь при помощи манипуляций с ключами можно получить все данные из массива, если нам необходима только фамилия мы вызываем массив с указанием идентификатора:
    [cc lang="php"]

    echo $anketa["family"]; //В браузер будет выведена фамилия

    ?>

    [/cc]

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

    [cc lang="php"]

    $anketa = array("family"=>“Петров”,”name”=>”Алексей”,”year”=>”1988″);

    //Здесь происходит перебор массива и вывод ключа и
    //соответствующее ему значение
    foreach ($anketa as $k => $v) {
    echo “$k – $v
    “;
    }
    ?>

    [/cc]

    2. Без указания ключа:

    [cc lang="php"]

    $anketa = array("Петров","Алексей","1988");

    ?>

    [/cc]

    В данном случае  по умолчанию ключами являются числовые значения. Чтобы вызвать имя необходимо выполнить следующее:
    [cc lang="php"]

    echo $anketa[1];
    ?>

    [/cc]

    У первого значения ключ в данном случае будет равен 0, т.е. echo $anketa[0]; выдаст фамилию .

    Я думаю этих простых примеров достаточно, давайте обратимся к документации.

    Синтаксис

    Массив может быть создан языковой конструкцией array(). В качестве параметров она принимает определенное количество разделенных запятыми пар key => value (ключ => значение).

    Все что мы с вами разобрали является примерами одномерного массива. Далее рассмотрим примеры многомерных массивов.

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

    Со временем ваши программы станут более сложными, и возможностей простых одномерных массивов окажется недостаточно для хранения необходимой информации. Многомерный массив (массив массивов) предоставляет в распоряжение программиста более эффективные средства для хранения информации, требующей дополнительного структурирования. Создать многомерный массив несложно — просто добавьте дополнительную пару квадратных скобок, чтобы вывести массив в новое измерение .

    [cc lang="php"]

    $school = array( "class"=>array(“9″,”10″,”11″),”teacher”=>array(“Михайлова И.В.”,”Иванова Л.П”,”Радищева О.В”));

    //Выведет 9 класс
    echo $school['class'][0];

    ?>

    [/cc]

    Это и будет наш многомерный массив, т.е. массив внутри массива, его состав можно посмотреть командой print_r(массив):

    [cc lang="php"]

    print_r($school);

    ?>

    [/cc]

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

    Практика

    Практика показывает что Вам предстоит довольно часто сталкиваться с массивами: при работе с информацией полученной из файлов или из БД, данные переданные через суперглобальные массивы $_POST и $_GET и других случаях. Помимо функции создания массива array(), существует множество вспомогательных функций для работы с массивами, с ними вы можете ознакомиться самостоятельно в документации.

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

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

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

    Детали

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

    index.php

    Файл остается без изменений.

    add.php

    Оставляем без изменений

    read.php

    Оставляем без изменений

    moder.php

    Данный файл будет отвечать за редактирование записей. Он состоит из 3-х частей начнем с первой.

    Вывод записей

    Отображение записей будет происходить так же как и в read.php , но немного будет модернизирован, каждой записи будет присвоен номер, под которым он находиться в массиве.

    [cc lang="php"]

    ////////////////////////
    // /Вывод сообщений ///
    ///////////////////////
    else {

    //Читаем файл в массив
    $data = @file($url);

    //Запускаем цикл, чтобы определить номер записи
    //и в последующем передовать это значение(см. выше)
    for($i=0;$i<=count($data)-1;$i++) {

    //Разбиваем строку на переменные
    list($name,$mail,$text) = explode("::",$data[$i]);

    //Выводим их в браузер
    echo "$name [$mail] - $text
    “;

    //Ссылка на удаление [D] , в ней передается 2 переменные методом GET
    echo “[D]“;

    //Ссылка на редактирование [E] ,

    //в ней передается 2 переменные методом GET
    echo “[E]“;
    echo “

    “;

    }

    }

    [/cc]

    Обратите внимание что этот фрагмент работает после проверки условий, которые мы рассмотрим ниже.  Здесь напротив каждой записи стоят две ссылки [D] и [E] , т.е. delete или edit. Ссылка передает 2 переменные, наличие которых мы будет проверять выше.

    Удаление записей

    Для того чтобы удалить запись, мы должны знать её порядковый номер в массиве, для этого  мы создали ссылку в режиме просмотра сообщений. После перехода по этой ссылке, значения извлекаем из массива $_GET, где $_GET['del'] будет содержать единицу, а $_GET['num'] – переменную $i. Давайте рассмотрим следующий фрагмент:

    [cc lang="php"]

    ////////////////////
    //Удаление записи//
    ///////////////////

    //Проверяем наличие переменной
    if($_GET['del']) {
    //Читаем файл в массив
    $data = @file($url);
    //Удаление элемента в массиве,
    //номер которого передавали вторым параметром $num
    $data[$_GET['num']]=”";

    //Записываем массив обратно
    $f = fopen($url,”w”);
    for($i=0;$i<=sizeof($data);$i++)
    {
    fputs($f,$data[$i]);
    }
    fclose($f);
    //Выводим сообщение
    echo "Запись удалена
    “;
    echo “назад“;
    }

    [/cc]

    Достаточно все просто, просто стираем значение в массиве, под необходимым номером.

    Редактирование

    Для того чтобы изменить запись, мы также должны знать её порядковый номер в массиве, для этого  мы создали ссылку в режиме просмотра сообщений. После перехода по этой ссылке, значения извлекаем из массива $_GET, где $_GET['edit'] будет содержать единицу, а $_GET['num'] – переменную $i. Редактирование происходит в 2 этапа. Сначала мы выводим выбранную запись, значения которой оказываются в полях ввода input и textarea,  после внесенных изменений нажимаем на кнопку, которая передает данные скрипту, выполняющего перезапись в файле.

    [cc lang="php"]

    /////////////////////
    // редактирование ///
    ////////////////////
    if($_GET['edit']){
    //Создаем условие, проверяем была ли нажата кнопка
    if($_POST['change']) {

    //Читаем файл в массив
    $data = @file($url);

    //Формируем строку и пишем её на старое место в массиве
    $data[$_POST['num']] = $_POST['name'].”::”.$_POST['mail'].”::”.$_POST['text'].”\n”;

    //Открываем файл и урезаем его до нулевой длины
    $f = fopen($url,”w”);
    for($i=0;$i<=sizeof($data);$i++)
    {
    //Пишем строки(значения массива)
    fputs($f,$data[$i]);
    }
    fclose($f);

    //Выводим сообщение
    echo "Запись изменена
    “;
    echo “назад“;

    }
    else {
    //Читаем файл в массив
    $data = @file($url);

    //Преобразуем строку в переменные
    list($name,$mail,$text) = explode(“::”,$data[$_GET['num']]);

    //Выводим форму
    echo ‘

    ‘;
    echo ‘Имя:

    ‘;
    echo ‘Эл.почта:

    ‘;
    echo ‘
    ‘;
    echo ‘
    echo '
    ‘;

    echo ‘

    ‘;

    }
    }

    [/cc]

    Соединяя все фрагменты кода, получаем следующее:
    [cc lang="php"]

    $url="gb.txt";

    ////////////////////
    //Удаление записи//
    ///////////////////
    if($_GET['del']) {
    //Читаем файл в массив
    $data = @file($url);
    //Стираем элемент в массиве
    //номер которого передавали вторым параметром $num
    $data[$_GET['num']]="";

    //Записываем массив обратно
    $f = fopen($url,"w");
    for($i=0;$i<=sizeof($data);$i++)
    {
    fputs($f,$data[$i]);
    }
    fclose($f);
    //Выводим сообщение
    echo "Запись удалена
    “;
    echo “назад“;

    }

    /////////////////////
    // редактирование ///
    ////////////////////
    if($_GET['edit']){
    //Создаем условие, проверяем была ли нажата кнопка
    if($_POST['change']) {

    //Читаем файл в массив
    $data = @file($url);

    $name = $_POST['name'];
    $mail = $_POST['mail'] ;
    $text = $_POST['text'];

    //Формируем строку и пишем её на старое место в массиве
    $data[$_POST['num']] = “$name::$mail::$text\n”;

    //Открываем файл и урезаем его до нулевой длины
    $f = fopen($url,”w”);
    for($i=0;$i<=sizeof($data);$i++)
    {
    //Пишем строки(значения массива)
    fputs($f,$data[$i]);
    }
    fclose($f);

    //Выводим сообщение
    echo "Запись изменена
    “;
    echo “назад“;

    }
    else {
    //Читаем файл в массив
    $data = @file($url);

    //Преобразуем строку в переменные
    list($name,$mail,$text) = explode(“::”,$data[$_GET['num']]);

    //Выводим форму
    echo ‘

    ‘;
    echo ‘Имя:

    ‘;
    echo ‘Эл.почта:

    ‘;
    echo ‘

    ‘;
    echo ‘
    ‘;

    echo ‘

    ‘;

    echo ‘

    ‘;

    }
    }

    ////////////////////////
    // /Вывод сообщений ///
    ///////////////////////
    else {

    //Читаем файл в массив
    $data = @file($url);

    //Запускаем цикл, чтобы определить номер записи
    //и в последующем передовать это значение(см. выше)
    for($i=0;$i<=count($data)-1;$i++) {

    //Разбиваем строку на переменные
    list($name,$mail,$text) = explode("::",$data[$i]);

    //Выводим их в браузер
    echo "$name [$mail] - $text
    “;

    //Ссылка на удаление [D] , в ней передается 2 переменные методом GET
    echo “[D]“;

    //Ссылка на редактирование [E] , в ней передается 2 переменные методом GET
    echo “[E]“;
    echo “

    “;

    }

    }
    ?>
    [/cc]

    Исходники

    gbook0.2.zip

    Итог

    В итоге мы получаем скрипт, который позволяет управлять записями, заметьте что работа с файлам полностью завязана на массивах. Данный урок достаточно простой, изучив который вы поймете как работать с файлами и информацией содержащейся в массивах. Другие всевозможные доски обьявлений, чаты, скрипты для отправки комментариев, форумы, работают на схожем принципе. Если хотите применять данный скрипт, не забудьте установить авторизацию на модуль модерирования. Как это сделать описано в предыдущем уроке: Урок 2. Описание процедуры авторизации . Весь код предоставлен без дизайна, на то оно и программирование, чтобы программировать, если хотите можете сверстать простенький шаблон и использовать где угодно.

    Google Bookmarks БобрДобр.ru Memori.ru rucity.com МоёМесто.ru Mister Wong
    rss-лентаПодпишись на RSS, впереди много интересного.

    19 Responses to “Урок 7. Массивы в PHP”

    Страницы: [2] 1 » Show All

    1. 19
      LakmusNo Gravatar Says:

      Писец копипастеров развелось, прохода нет… Ты бы афтар с такими уроками шел бы лучше мусор убирать

    2. 18
      neadminNo Gravatar Says:

      круто!но буду ждать качество.

    3. 17
      mityaNo Gravatar Says:

      НЕ могу понять куда прикрепить этот модуль moder.php. В исходниках он стоит отдельным особняком, при загрузке страницы мы используем для вывода сообщений read.php, а для добавление записи add.php, Так куда прикрутить этот модер.пхп?

    4. 16
      правдаNo Gravatar Says:

      и удаляется тупо.. раезве потом вместо мессаги пустой строки не будет? юзайте unset

    5. 15
      правдаNo Gravatar Says:

      срань, любой через гет удалить может

    6. 14
      JettieNo Gravatar Says:

      Спасибо за уроки.
      Очень доступно и познавательно. Я долго искал в сети нечто подобное.

      а нет ли у вас в уроках описания подобного функционала, но с использованием БД? у самого меня пока не получается адаптировать скрипт под БД.

    7. 13
      SergioNo Gravatar Says:

      Уроки конечно очень интересние и описано все доступно!
      Но все МИ учимса и хотим узнать что ето за ошыбки чтобы неповторять их в будушем!

    8. 12
      No Gravatar Says:

      2All: а нельзя оставлять комментарии по теме, а не тупые повесил на стенку, автор жжет, +1 и т.д. Деградация интернета блин

    9. 11
      SergioNo Gravatar Says:

      Антон их можна записать так if(isset($_GET['edit']))
      Но я немогу понять почему после удаления и редактирования комента, появляєтса ошыбка а именно
      Undefined offset: 2 в
      list($name,$mail,$text) = explode(“::”,$data[$i]);
      ето после редактирования а посое удаления такая же самая ошибка толко в цикле for самом

    Страницы: [2] 1 » Show All

    Leave a Reply


freshcoder.ru © 2008 • При использовании материалов активная ссылка на сайт обязательна.
SEO Powered by Platinum SEO from Techblissonline