- •Язык php
- •Динамические сайты
- •Преимущества обработки страниц на стороне сервера
- •Современные технологии обработки страниц на стороне сервера
- •Active Server Pages (asp)
- •Java Servlets и jsp
- •Контрольные вопросы
- •Возможности языкаPhp ОбработкаHtmLформ
- •ГенерированиеHtmLстраниц
- •Взаимодействие с субд
- •Поддержка большого количества библиотек
- •Контрольные вопросы
- •Создание динамических страниц Создание простейшегоPhp-скрипта
- •Рнр и код, выполняемый на стороне клиента
- •Взаимодействие с пользователем
- •Контрольные вопросы
- •Синтаксис языкаPhp Типы данных
- •Константы
- •Объявление и инициализация переменных
- •Преобразование типов
- •Арифметические операторы
- •Унарный оператор
- •Оператор конкатенации строк
- •Сокращенная запись для присвоениязначений переменным
- •Операторы сравнения
- •Условные операторы
- •Функции пользователя
- •Массивы
- •Работа с файлами
- •Контрольные вопросы
- •Рнр иMySql Обработка и хранение структурированных данных
- •Динамические сайты, использующие базу данных
- •Построение реляционной базы данных
- •Продавцы
- •Заказчики
- •SqLзапросы к реляционной базе данных
- •Insert into salespeople values(1001,'Иванов','Москва',0.12);
- •Insert into customers values(2001,'Белкин','Москва',100,1001);
- •Insert into orders values(3008,4723.00,'2002-10-05',2006,1001);
- •Особенности реализацииMySql
- •ВзаимодействиеPhp иMySql
- •Контрольные вопросы
- •Разработка системы "Прайс-лист"
- •Постановка задачи
- •Принципы функционирования программного комплекса
- •Разработка структуры базы данных
- •Проектирование системы администрирования
- •Проектирование генератора прайс-листа
- •Контрольные вопросы
Массивы
Массив – совокупность переменных, объединенных одним именем. Переменные, входящие в состав массива называются элементами массива. Элементом массива в PHP может быть число (как простое, так и вещественное), строка или другой массив (массив, содержащий элементы-массивы называется многомерным). В отличие от большинства строго типизированных языков программирования (таких как C или Паскаль), в РНР массивы могут держать элементы нескольких разных типов одновременно. Каждый элемент массива может принадлежать любому типу данных независимо от типа данных других элементов.
С точки зрения внутренней организации, массивы могут быть ассоциативными и не ассоциативными. Обратиться к элементу, входящему в состав не ассоциативного массива можно при помощи его индекса (порядкового номера). Обращение к элементу ассоциативного массива осуществляется при помощи ключа (уникального набора символов, являющегося именем элемента).
Для начала рассмотрим не ассоциативные массивы. Существует несколько способов инициализации не ассоциативных массивов. Один из способов состоит просто в присвоении значений переменной массива. При каждом таком действии к массиву добавляется новый элемент:
$countries[]="ru";
$countries[]="de";
$countries[]="ua";
Этот код создает массив из трех элементов. Поскольку мы не указывали явно индексы внутри квадратных скобок, элементам даются индексы по умолчанию: 0, 1 и 2. Следует заметить, что в PHP массивы индексируются, начиная с нулевого элемента (элемента с индексом 0).
Тот же код можно написать с явным указанием индексов:
$countries[0]="ru";
$countries[1]="de";
$countries[2]="ua";
Обычно удобно присваивать индексы в последовательном порядке, как было сделано выше. Однако при необходимости можно присваивать любые целые индексы по своему усмотрению:
$countries[50]="ru";
$countries[20]="de";
$countries[10]="ua";
echo $countries[20]; // Выводит de
Этот массив тоже содержит три элемента, но с индексами 10, 20 и 50.
При необходимости узнать, сколько элементов содержит массив, можно воспользоваться функцией count (), которая возвращает целое число, представляющее собой количество элементов в массиве. Для приведенного выше примера функция count($countries) возвратила бы 3.
Другой способ инициализации массива использует конструкцию array ()
$countries=array ("ru","de","ua");
echo "$countries[0]"; // Выводит "ru"
Если нужно переопределить индексы, присвоенные по умолчанию, то с помощью оператора => можно присвоить нашим элементам конкретные индексы. В приведенном выше примере $countries содержит три элемента с индексами 0, 1 и 2. Если нужно, чтобы нумерация массива начиналась с единицы, т. е. индексами элементов были 1, 2 и 3, то можно записать:
$countries = array (1=>"cr", 2=>"de", 5=>"ua");
echo "$countries[2]"; // Выводит "de"
В приведенном выше примере создается массив, состоящий из трех элементов с индексами 1, 2 и 5. Оператор => можно использовать для присвоения любого произвольного индекса элементу массива.
Одной из наиболее часто встречающихся операций, производимой с массивом, является обход его элементов в цикле в сочетании с модификацией или выводом их (элементов) значений. Простейший способ сделать обход элементов не ассоциативного массива заключается в использовании цикла for и функции count.
$countries = array ("ru","de","ua");
$el_number=count($countries);
for ($i=0;$i<$el_number; $i++) {
echo $countries[$i]." ";
}
В результате работы этой программы будет выведена строка “ru de ua”.
До сих пор все рассмотренные массивы были не ассоциативными, т.е. имели числовые индексы. Однако массивы могут использовать в качестве индексов строки (ключи). Такие массивы называются ассоциативными.
$countries["ru"]="Россия";
$countries["de"]="Германия";
$countries["ua"]="Украина";
echo $countries["ua"]; //Выводит Украина
В приведенном выше примере был инициализирован ассоциативный массив, состоящий из трех элементов. Обращение к элементу массива осуществляется только через его ключ. Не смотря на внешнее сходство с предыдущими примерами, к элементам ассоциативного массива невозможно обратиться при помощи числового индекса. В предыдущем примере при попытке вывести значении массива с числовым индексом, например $countries[0], будет сгенерировано сообщение об ошибке.
Инициализацию ассоциативного массива можно осуществить с помощью конструктора массивов array () и оператора =>, как в примере, приведенном ниже.
$countries=array("ru"=>"Россия",
"de"=>"Германия",
"ua"=>"Украина");
echo $countries["ru"]; //Выводит Россия
Обход ассоциативного массива в цикле на первый взгляд представляется нетривиальной задачей, поскольку названия элементов массива могут быть абсолютно произвольными. Для того, чтобы осуществить циклическую обработку массива, необходимо воспользоваться вспомогательными функциями.
Массивы в PHP представляют собой довольно сложные конструкции. По сравнению с классическими языками программирования (такими как С или Паскаль), в которых массив организован как последовательность ячеек памяти, массив в PHP, с точки зрения своей архитектуры напоминает объект, обладающий рядом дополнительных свойств. Одним из этих свойств является внутренний курсор, указывающий на активный элемент массива. По умолчанию курсор указывает на первый элемент массива. При помощи специальных функций можно передвигать курсор внутри массива и получать информацию об элементах массива (например ключ и значение текущего элемента массива).
Функция each в качестве параметра получает массив и выводит информацию об элементе, на который указывает внутренний курсор. Информация об элементе массива будет представлена в виде массива, состоящего из четырех элементов. После выполнения функции each внутренний курсор будет автоматически переведен на следующий элемент массива. После прохождения последнего элемента массива, при попытке вызова функция each возвратит значение "ложь".
$countries=array("ru"=>"Россия",
"de"=>"Германия",
"ua"=>"Украина");
$arr=each($countries);
$arr будет массивом из четырех элементов со следующими ключами и значениями:
Первый элемент имеет индекс 0 и значение ru.
Второй элемент имеет индекс 1 и значение Россия.
Третий элемент имеет индекс "key" и значение ru.
Четвертый элемент имеет индекс "value" и значение Россия.
В результате выполнения функции each будет получен массива из четырех элементов с индексами 0, 1, "key" и "value". Элементы 0 и "key" содержат индекс текущего элемента массива $countries. Элементы 1 и "value" содержат значение текущего элемента массива $countries.
Функция list используется для присвоения значений элементов массива заданным переменным. Вызов функции выглядит довольно необычно и больше похож на встроенную конструкцию языка PHP:list(перем1,..,перемN)=массив. Списку переменных, описанных при вызове функцииlistприравнивается массив, значениями элементов которого будут инициализированы описанные переменные.
$countries=array("Россия","Германия","Украина");
list($val1,$val2)=$countries;
echo $val1.'<br>'; //$val1=”Россия”
echo $val2; //$val2=”Германия”
Количество переменных, описанных при вызове функции list, может быть меньше, чем количество элементов массива. Заполнение значений переменных начинается с первого элемента массива.
Рассмотрим пример, иллюстрирующий обход ассоциативного массива при помощи функций eachиvalue
$countries=array("ru"=>"Россия",
"de"=>"Германия",
"ua"=>"Украина");
while (list($key,$value)=each($countries)) {
echo $key.' '.$value.'<br>';
}
Функция each формирует массив на основе информации, полученной об активном (выделенном внутренним курсором) элементе массива $countries. Функция list выбирает первые два значения сформированного массива и присваивает их переменным $key и $value. В результате, получены ключ и значение одного из элементов массива $countries. После выполнения функции each внутренний курсор массива сдвигается на один элемент. Цикл выполняется до тех пор, пока не будет пройден весь массив $countries.
Как уже было сказано ранее, массивы могут быть одномерными и многомерными. Многомерными называются массивы, элементами которых являются другие массивы. Размерность массива может быть любой, однако в качестве примера проще всего рассматривать двумерные массивы. Рассмотрим массив $countries, индексируемый строками. Будем использовать вложенную конструкцию array, чтобы каждый элемент этого массива содержал массив стран:
$continents=array("Europe"=>array("de","uk"),
"North America"=>array("ca", "cr", "us"));
echo($continents["Europe"][1]); // Выводит "uk"
echo($continents["North America"][2]); // Выводит "us"
Для обхода вложенных массивов надо использовать вложенные циклы:
$continents=array("Europe"=>array("de","uk"),
"North America"=>array("ca","cr","us"));
while (list($key1)=each($continents)) {
echo("$key1:<BR>"); // Вывести название континента
while(list($key2,$val2)=each($continents["$key1"])) {
echo ("$val2<BR>"); // Вывести список стран на этом континенте
}
}