Использование массивов в PHP
Массивы как в PHP, так и других языках представляют собой структурную организацию хранения множества значений в одной переменной. То есть — однако переменная хранит множество отдельных значений разных типов. Но как осуществить доступ к тому или иному значению, когда у переменной одно имя? Для этого массив снабжен индексами, которые и являются ссылкой на определенное значение.
Структура массива и его создание
Чтобы понять, что такое массив, необходимо представить ящик с ячейками. У ящика есть имя, к примеру «box». В ящике есть определенное количество ячеек, в которые можно положить документы. Количество ячеек является длиной массива. Каждая ячейка обладает своим числовым индексом. Ячейки расположены по порядку с лева на право и первая ячейка обладает нулевым индексом, то есть — отсчет начинается с нуля. Представив ящик с вертикальными ячейками, теперь необходимо понять, как это выглядит на языке PHP.
Простое объявление массива:
<?php
$box;
$box[0] = «first»;
$box[1] = «second»;
$box[2] = «third»;
$box[3] = «fourth»;echo «$box»; // first, second, third, fourth
echo «$box[2]»; // third
echo «$box[0].’, ‘.$box[3]»; // first, fourth
?>
Как видно из примера выше, для массива используется одно имя переменной $box, что соответствует названию нашего ящика. Индекс в квадратных скобках [] указывает номер ячейки, а на экран выводится то значение, которое находится в ячейке с указанным индексом. Однако данный вариант объявления и инициализации массива не единственный. Рассмотрим еще примеры создания массива.
Инициализация без указания индекса:
<?php
$box;
$box[] = «first»;
$box[] = «second»;
$box[] = «third»;
$box[] = «fourth»;echo «$box»; // first, second, third, fourth
echo «$box[2]»; // third
?>
В данном случае интерпретатор автоматически назначает числовые индексы массиву. Самое первое присвоение инициализирует нулевой индекс, последующие присвоения будут инициализировать индексы в порядке очереди. Если массиву не присваивать индексов, то интерпретатор автоматически создаст числовые индексы.
Создание массива посредством функции array()
Нет необходимости каждый раз писать имя переменной с разными индексами для присвоения элементов массиву. В PHP есть конструкция, которая упрощает и объявление и инициализацию массива:
$arr = array(«a», «b») — то же, что и $arr[0] = «a»; $arr[1] = «b».
Пример:
$books = array(«Hary Potter», «Sherlock Holmes», «Happy Tales»); // Инициализациямассиваоператором array()
echo «$books[1]»; \\ Sherlock Holmes
echo «count($books)»; \\ 3\\ Всегда можно увеличить количество элементов в массиве при такой инициализации
$books[4] = «War and peace»;
$books[5] = «History of Europe»;echo «$books»; \\ Hary Potter, Sherlock Holmes, Happy Tales, War and Peace, History of Europe
echo «count($books)»; \\ 5
Ассоциативный массив
Ассоциативный массив отличается от обычного тем, что вместо числовых индексов, здесь используются строковые.
Сравним числовой и ассоциативный массив, чтобы увидеть разницу:
- $books[5] — в данном элементе у нас лежит строковое название книги «HistoryofEurope»
- $books[«history»] — в ассоциативном массиве индексы имеют имена.
Объявление ассоциативного массива на примере предыдущего $books:
1. Простое объявление:
$books[«phantasy»] = «Harry Potter»;
$books[«detective»] = «Sherlock Holmes»;
$books[«for_children»] = «Happy Tales»;
$books[«classiks»] = «War and Peace»;
$books[«education»] = «History of Europe»;
2. Теперь объявим данный массив через функцию array():
$books = array(«phantasy»=>»Harry Potter», «detective»=>»Sherlock Holmes», «for_children»=>»Happy Tales», «classiks»=>»War and Peace», «education»=>»History of Europe» );
echo «$books[‘phantasy’]»; // HarryPotter
Как видно знаком присвоения в данной конструкции выступает оператор «=>». Конечно же массив можно расширять добавлением новых элементов. Однако у ассоциативного массива индекс всегда строковой, но при обращении всегда можно использовать строковую переменную вместо конкретного индекса.
$index = «education»;
echo «$books[$index]»; \\ History of Europe
Многомерные массивы
Многомерный массив представляет собой массив, элементами которого являются массивы. Другими словами — это ящик с названием, в котором находятся другие безымянные ящики но с ячейками. Многомерные массивы могут быть как ассоциативными, так и числовыми. Массив может состоять из массивов, массив из массивов массивов — так до бесконечности. Раз уж это вложенные массивы, до и доступ к ним осуществляется по особой схеме. Рассмотрим двухмерный массив и разберемся как осуществлять доступ к элементам.
Пример инициализации многомерного массива:
// первый способ инициализации двухмерного массива
$arr[0] = array(«a», «b», «c»);
$arr[1] = array(«d», «e», «f»);
$arr[2] = array(«g», «h», «x»);// второй способ создания числового двухмерного массива
$arr = array(array(«a», «b», «c»), array(«d», «e», «f»), array(«g», «h», «x»));// Инициализацияассоциативногомассива
$arr_asociativ = («first» => array(«a», «b», «c»), «second» => array(«d», «e», «f»), «third» => array(«g», «h», «x»))
// Вывод значения элементов
echo «$arr[0][0]»; // a
echo «$arr[0]»; // a, b, c
echo «$arr[1][2]»; // f// Вывод значений ассоциативного двухмерного массива
echo «$arr_asociativ[‘second’][1]»; // e
echo «$arr_asociativ[‘third’]»; // g, h, x
Перебор массивов в циклах
Перебор массива — это получение или изменение всех, или нескольких его элементов в цикле. Для этого в основном используют циклы for и foreach
Перебор массива в for:
$box = array(50, 30, 44, «splash»);
for($i = 0; i<=count($box); i++){
$add = $box[$i] + 20; // Прибавляем к каждому значению элемента 20 и сохраняем в переменную
echo «$add»; // Выводим значение переменной каждой итерации.
}// Вывод: 70, 50, 44, 20
Таким образом, мы пробежались по каждому элементу массива и сложили его с числом. Результат каждой итерации сохранялся в переменную, а результат выводился на экран. Конечно можно пробежать по массиву и без цикла, но это заставит программиста написать огромное количество лишних строк кода.
Массив — это структура хранения данных
Ввиду того, что массив считается одним участком памяти, разделенным на части, логично считать, что массив является структурой, организованной для хранения множества литералов, к которым можно обратиться по одной ссылке. Рассмотрим на примере реализацию особенности данной структуры.
Удаление элементов с помощью простых операторов не уменьшит длину массива:
$arr = array(«a», «b», «c»);
$arr[1] = null; // удаляем значение второго элементаecho «$arr»; // a, b — вывело два элемента
echo «count($arr)»; // 3 — по прежнему 3 элемента в массиве даже после удаления.
Таким образом, мы удалили лишь значение второго элемента, но не убрали ячейку. Для того чтобы удалить значения и ячейки, необходимо пользоваться специальными функциями, которые были разработаны специально для PHP.
Рассмотрим примеры некоторых функций:
- arr_map(«f», $arr) — выполняет функцию «f» для каждого элемента массива $arr;
- array_merge($arr1, $arr…) — объединяет несколько массивов в один;
- array_pop() — удаляет последнюю ячейку и ее значение, длина массива уменьшается на 1;
- array_push() — вставляет один или несколько ячеек в конец массива;
- array_shift() — удаляет первую ячейку массива;
- array_slice(from, to) — выбирает количество значений элементов из массива в диапазоне fromto и возвращает эти значения в виде нового массива.
Где применяются массивы?
Массивы являются хранилищем для связанных объектов. К примеру — фамилии школьников 1-Б класса или номера домов на определенной улице. В PHP предусмотрен огромный набор функций, которые позволяют манипулировать с ячейками массива.
Массив можно сортировать, получать случайное значение, перебирать, находить элементы согласно условию, фильтровать, делить и многое другое. Такая организация памяти экономит силы программиста путем отсутствия необходимости писать огромный код.
Массивы являются частью любого языка и уже давно стали стандартом в программировании и организации данных. Ведь они позволяют не только компактно хранить данные, но и грамотно ими распоряжаться.