Скачиваний:
39
Добавлен:
04.04.2013
Размер:
728.06 Кб
Скачать

Массивы

Массив – совокупность переменных, объединенных одним именем. Переменные, входящие в состав массива называются элементами массива. Элементом массива в 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 будет массивом из четырех элементов со следующими ключами и значе­ниями:

  1. Первый элемент имеет индекс 0 и значение ru.

  2. Второй элемент имеет индекс 1 и значение Россия.

  3. Третий элемент имеет индекс "key" и значение ru.

  4. Четвертый элемент имеет индекс "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>"); // Вывести список стран на этом континенте

}

}