- •Технология организации баз данных и знаний
- •Методические указания к выполнению лабораторных работ
- •Методические указания к выполнению лабораторных работ
- •Предисловие
- •Библиографический список
- •Лабораторная работа № 1 Тема №1. ИнсталляцияMySqLи создание локального сервера
- •1. Цель работы
- •2. Основные технические возможности
- •3. Описание установки
- •4. Порядок выполнения работы
- •5. Содержание отчета
- •Лабораторная работа № 1
- •6. Содержание отчета
- •Лабораторная работа № 2 Тема №1. Создание баз и таблиц данных
- •1. Цель работы
- •2. Основные сведения
- •3. Программа работы
- •4. Указания к выполнению работы
- •3. Программа работы
- •00 Проверка моего домена с именем Moy.Loc
- •4. Указания к выполнению работы
- •5. Содержание отчета
- •3. Указания к выполнению работы
- •Задание 2: Разработать html-форму с методом Post
- •Тема №2. Передача значений переменным в сценариях php. Использование возможностей метода get без html-формы для передачи значений переменных в сценариях php
- •Тема №3. Создание формы и рнр-сценария в одном файле
- •Задание 1: Получение данных из текстового поля
- •I курсив
- •Тема №4. Использование чисел. Управляющие структуры
- •Тема №5. Использование управляющей структурыswitch
- •Тема № 6. Использование регулярных выражений в сценариях рнр
- •Проверка ошибок
- •Задание 1. Вывод информации о ошибочно заполненных полях формы
- •Задание 2. Использование функций пользователя для контроля полей формы
- •Задание 3. Проверка ограничений в текстовом поле.Lab6_0_2.Php
- •Задание 4. Специфика имени пользователя. Lab6_0_3.Php
- •Задание 5. Специфика имени пользователя с помощью JavaScript. Lab6_0_4.Php
- •Тема №7. Работа с массивами
- •Задание 1. Означивание массива и вывод на экран. Lab7_0.Php.
- •Задание 4. Сортировка массива.Lab7_3.Php.
- •Тема №8. Функции в сценариях рнр
- •Задание 1. Вложенные функции.Lab8_0_0.Php
- •Задание 2. Объявление функций внутри других функций.Lab8_0.Php
- •Задание 3. Возврат значений функцией.Lab8_1.Php
- •Задание 4. Возврат нескольких значений функцией.Lab8_2.Php
- •Задание 5. Возвращение функцией нескольких величин.Lab8_3.Php
- •Задание 6. Рекурсивные функции .Lab8_4.Php
- •Задание 7. Функции-переменные.Lab8_5.Php
- •Задание 8. Построение библиотек функций.Lab8_6_0.Php.
- •Задание 9. Построение шаблона сайта.Lab8_7_0.Php.
- •Тема №9. Использование файлов для хранения данных в сценариях рнр
- •Создание сценария загрузки.
- •Задание 3. Сохранение пользовательских данных в текстовом файлеLab9_5.Php
- •Задание 4. Сохранение пользовательских данных в текстовом файлеLab9_6_0.Php
- •Тема № 10. Работа с каталогами в сценариях рнр
- •Тема №11. Создание панели управления файлами
- •Задание 1. Разработать форму и сопутствующее ей приложение для панели управления файлами.
- •Тема № 12.Работа с базой через монтторMySql и PhpMyAdmin
- •Задание 1. Создать базу данных через командную строку
- •Задание 3. Вставка данных в базу данных
- •Задание 4. Создание командных файлов и файлов сценариев для вставки данных в базу данных.
- •Тема № 13. Извлечение данных из базы данных
- •Задание 1. Оператор выборки данныхSelect
- •Задание 2. Извлечение данных по определенному критерию
- •Задание 3. Извлечение данных из нескольких таблиц
- •Задание 4. Поиск несоответствующих строк
- •Задание 5. Использование псевдонимов имен таблиц (as)
- •Задание 6. Извлечение данных в определенном порядке
- •Задание 7. Группировка и агрегирование данных
- •Задание 8. Обновление записей в базе данных (update)
- •Задание 10. Удаление записей, таблиц и базы данных (delete)
- •Тема № 14.Php и MySql. Доступ к базе данных MySql из Web с помощью рнр
- •Задание 1. Изучение работы архитектуры Web-баз данных
- •Задание 2. Проверка и фильтрация данных, исходящих от пользователя. Использование объектно-ориентированного синтаксисаPhp
- •Задание 3. Внесение новой информации в базу данных. Проверка и фильтрация данных, исходящих от администратора
- •Задание 4. Создание и удаление баз данных
- •Содержание
Тема №7. Работа с массивами
Цель работы: Обучение использованию массивов в сценариях PHP.
Массив представляет собой набор переменных, объединенных одним именем. Каждое значение массива идентифицируется индексом, который указывается после имени переменной-массива в квадратных скобках. Комбинацию индекса и соответствующего ему значения называют элементом массива.
1<?
2 $i = 1024;
3 $a[1] = 'abc';
4 $a[2] = 100;
5 $a['test'] = $i - $a[2];
6
7 echo $a[1] . "<br>\n";
8 echo $a[2] . "<br>\n";
9 echo $a['test'] . "<br>\n";
10 ?>
В приведенном примере, в строке три объявляется элемент массива $a с индексом 1; элементу массива присваивается строковое значение 'abc'. Этой же строкой объявляется и массив $a, так как это первое упоминание переменной $a в контексте массива, массив создается автоматически. В строке 4 элементу массива с индексом 2 присваивается числовое значение 100.
В строке же 5 значение, равное разности $i и $a[2], присваивется элементу массива $a со строковым индексом 'test'.
Как видите, индекс массива может быть как числом, так и строкой.
В предыдущем примере массив создавался автоматически при описании первого элемента массива. Но массив можно задать и явно:
1 <?
2 $i = 1024;
3 $a = array( 1=>'abc', 2=>100, 'test'=>$i-100 );
4 print_r($a);
5 ?>
Созданный в последнем примере массив $a полностью аналогичен массиву из предыдущего примера. Каждый элемент массива здесь задается в виде индекс=>значение. При создании элемента 'test' пришлось указать значение 100 непосредственно, так как на этот раз мы создаем массив "одним махом", и значения его элементов на этапе создания неизвестны PHP.
В строке 4 для вывода значения массива мы воспользовались функцией print_r(), которая очень удобна для вывода содержимого массивов на экран - прежде всего, в целях отладки.
Строки в выводе функции print_r разделяются обычным переводом строки \n, но не тэгом <br>. Для удобства чтения, строку print_r(..) можно окружить операторами вывода тэгов <pre>...</pre>:
echo '<pre>';
print_r($a);
echo '</pre>';
Если явно не указывать индексы, то здесь проявляется свойство массивов PHP, характерное для числовых массовов в других языках: очередной элемент будет иметь порядковый числовой индекс. Нумерация начинается с нуля. Пример:
1 <?
2 $operating_systems = array( 'Windows', 'Linux', 'FreeBSD', 'OS/2');
3 $operating_systems[] = 'MS-DOS';
4
5 echo "<pre>";
6 print_r($operating_systems);
7 echo "</pre>";
8 ?>
Ниже приведенное задание 1 показывает особенность использования функции print_r и тега <pre>…</pre> (рис. 3.83 -3.84).
Примечание. Далее в данной теме заголовок типа (рис. 3.80) приводить не будем.
Рис. 3.80. Заголовок в HTML коде.
Задание 1. Означивание массива и вывод на экран. Lab7_0.Php.
В представленной ниже программе (рис. 3.81) приведены несколько вариантов объявления массива в коде с последующим выводом содержимого массива на экран.
Код Lab7_0.php.
Рис. 3.81. Код Lab7_0.php.
Результат вывода элементов массивов с помощью кода Lab7_0.php.
Рис. 3.82. Вариант 1. Результат работы кода Lab7_0.php.
Отметьте, что втором варианте мы явно не указывали индексы: PHP автоматически присвоил числовые индексы, начиная с нуля.
Рис. 3.83. Вариант 2. Результат работы кода Lab7_0.php.
Рис. 3.84. Вариант 3. Результат работы кода Lab7_0.php.
Записи массив можно перебирать с помощью цикла for. Количество элементов массива возвращает оператор count.
Например, если в тело программы Lab7_0.php добавить строки (рис. 3.85)
Рис. 3.85. Модифицированный код Lab7_0.php.
Тогда результат будет
Рис. 3.86. Вариант 4. Результат работы кода Lab7_0.php.
Задание 2. Цикл foreach. Lab7_1.php.
Для перебора элементов массива предусмотрен специальный цикл foreach:
На рис. 3.87 показано использование цикла foreach, а на рис. 3.88 результат.
Рис. 3.87. Использование Foreach для вывода массива. Lab7_1.php
Рис. 3.88. Использование Foreach для вывода массива.
Этот цикл работает (рис. 3.87) следующим образом: в порядке появления в коде программы элементов массива $languages, переменным $key и $value присваюваются соответственно индекс и значение очередного элемента, и выполняется тело цикла.
Если индексы нас не интересуют, цикл можно записать следующим образом: foreach ($languages as $value).
Т. е. в программе рис. 3.87 произвести следующую замену:
Тогда вывод на экране будет как показано на рис. 3.89.
Рис. 3.89. Использование Foreach для вывода массива.
Задание 3. Конструкции list и each. Lab7_2.php.
В дополнение к уже рассмотренной конструкции array, существует дополняющая ее конструкция list, являющаяся своего рода антиподом array: если последняя используется для создания массива из набора значений, то list, напротив, заполняет перечисленные переменные значениями из массива.
Допустим, у нас есть массив $lang = array('php', 'perl', 'basic'). Тогда конструкция list($a, $b) = $lang присвоит переменной $a значение 'php', а $b - 'perl'. Соответственно, list($a, $b, $c) = $lang дополнительно присвоит $c = 'basic'.
Если бы в массиве $lang был только один элемент, PHP бы выдал замечание об отсутствии второго элемента массива.
А если нас интересуют не только значения, но и индексы? Воспользуемся конструкцией each, которая возвращает пары индекс-значение.
Рис. 3.90. Использование Foreach для вывода массива. Lab7_2.php.
На первый взгляд может удивить тот факт, что в строках 19-21 переменным присваиваются разные значения, хотя выражения справа от знака присваивания совершенно одинаковые. Дело в том, что у каждого массива есть скрытый указатель текущего элемента. Изначально он указывает на первый элемент. Конструкция each же продвигает указатель на один элемент вперед.
Результат работы кода представленного на рис. 3.90 показан ниже.
Рис. 3.91. Использование Foreach для вывода массива. Lab7_2.php.
Эта особенность each позволяет перебирать массив с помощью обычных циклов while и for. Конечно, ранее рассмотренный цикл foreach удобнее, и стоит предпочесть его, но конструкция с использованием each довольно распространена, и вы можете ее встретить во множестве скриптов в сети.
Ниже (рис. 3.92) показан модифицированный код Lab7_2.php, использующий цикл
Рис. 3.93. Использование While для вывода массива. Lab7_2.php.
Результат модифицированной программы приведенной на рис. 3.93, соответствует рис. 3.91.
После завершения цикла, указатель текущего элемента указывает на конец массива. Если цикл необходимо выполнить несколько раз, указатель надо принудительно сбросить с помощью оператора reset: reset($brows). Этот оператор устанавливает указатель текущего элемента в начало массива.