Массивы в PHP
В PHP массив - настолько часто используемая структура, что вам придётся встречаться с ней очень и очень часто. Например, через массивы в PHP-скрипт передаются все данные, полученные от браузера пользователя. Для быстрой и успешной работы необходимо понимать как работают массивы и какие при этом используются приёмы.
Что же такое массив?
В программировании термин "массив" означает набор элементов данных одного типа, причём доступ к элементам осуществляется по номеру элемента.
В языке PHP массивы обладают более широкими возможностями. Переменная, представляющая массив в PHP, может служить как обычным массивом с цифровыми индексами, так и отображением (mapping), то есть, массивом со строковыми индексами. Такие массивы называются ассоциативными.
Ассоциативный массив - это объект, задающий набор "ключей" и соответствующих им "значений". Массив можно представить себе в виде таблицы из двух колонок, в которой одна колонка является "ключом", а другая колонка - "значением":
Ключ (индекс) | Значение |
0 | Иванов |
1 | Петров |
2 | Сидоров |
anonymous | Аноним |
В языке PHP ключ, или индекс, может быть целым числом или строкой, а значение - любым, в том числе и другим массивом. То есть, в PHP средствами массивов можно создавать вложенные древовидные структуры.
Многомерные массивы в PHP, как и во многих других языках, организуются путём вложения одномерных массивов друг в друга.
Массивы PHP являются упорядоченными отображениями. Это означает, что в массиве сохраняется не только соответствие ключа и его значения, но и очерёдность, в которой пары "ключ-значение" были добавлены в массив.
Создание массива в PHP
Создать массив и добавить в него элементы можно несколькими способами:
- Создаём пустой массив, а затем добавляем элементы, указывая индексы и значения:
$names = array(); $names[0] = 'Иванов'; $names[1] = 'Петров'; $names[2] = 'Сидоров'; $names['anonymous'] = 'Аноним';
- Создаём сразу массив, заполненный нужными данными:
$names = array( 0 => 'Иванов', 1 => 'Петров', 2 => 'Сидоров', 'anonymous' => 'Аноним' );
- Создаём пустой массив, а затем добавляем данные, причём для первых трёх элементов индексы массива назначаются автоматически, начиная с нуля:
$names = array(); $names[] = 'Иванов'; $names[] = 'Петров'; $names[] = 'Сидоров'; $names['anonymous'] = 'Аноним';
В каждом из трёх приведённых примеров создаётся и одинаково заполняется массив $names.
Тот факт, что массивы в PHP являются упорядоченными отображениями, можно пояснить на таком примере:
$numbers = array(); // Создадим и заполним массив данными $numbers[1] = 'Один'; $numbers[3] = 'Три'; $numbers[4] = 'Четыре'; $numbers[2] = 'Два'; print_r($numbers); // выведем содержимое массива...
Этот пример выведет наш массив, причём элементы будут расположены не в порядке возрастания числовых индексов, а в том порядке, в котором они были добавлены в массив:
Array ( [1] => Один [3] => Три [4] => Четыре [2] => Два )
Обращение к элементам массива
При работе с массивом получить значение его элемента проще простого:
$name = $names[2]; // обращение по цифровому индексу $nameAnonymous = $names['anonymous']; // Обращение по строковому индексу
Здесь стоит иметь в виду, что чтение несуществующего элемента массива является не совсем корректной операцией, на что PHP сделает вам замечание. Чтобы этого не происходило, можно воспользоваться операторами isset или empty:
if(isset($names['admin'])) { echo "Админа зовут " . $names['admin']; } else { echo "Админа нет в списке!"; } if(empty($names['admin'])) { echo "Админа нет в списке!"; }
Чтобы пройти по всем элементам массива, удобнее всего воспользоваться циклом foreach:
foreach($names as $key => $value) { echo "Индекс = $key, значение = $value <br/>"; } foreach($names as $value) { echo "Значение = $value <br/>"; }
Удалить из массива элемент можно, воспользовавшись оператором unset.
unset($names[0]); unset($names['anonymous']);
Суперглобальные массивы в PHP
Программе, написанной на PHP, в любое время и в любом месте доступны так называемые суперглобальные массивы.
При обращении к глобальным переменным из функций, необходимо предварительно объявлять переменные, используя ключевое слово global. Иначе, изнутри функции код будет обращаться не к глобальной переменной, а к локальной.
$test = 'Global variable'; function myFunc() { global $test; echo $test; } myFunc();Суперглобальные переменные не нуждаются в объявлении через global:
function myFunc2() { print_r($_ENV); } myFunc2();
Суперглобальные массивы в PHP такие:
- $GLOBALS - содержит все глобальные переменные программы.
- $_GET, $_POST, $_REQUEST - содержат соответственно параметры запроса GET, POST, а также совокупности GET и POST параметров вместе с $_COOKIE.
- $_SESSION - содержит содержимое сессии.
- $_COOKIE - содержит набор Cookie, переданных с запросом HTTP.
- $_FILES - содержит описание файлов, загруженных по HTTP POST, закодированному как multipart/form-data.
- $_SERVER - содержат соответственно данные, переданные веб-сервером (заголовки HTTP, информация о сервере, информация об удалённом клиенте, путь к файлу скрипта)
- $_ENV - содержит переменные окружения.
Функции для работы с массивами
В PHP есть большой набор функций для работы с массивами. Есть функции для объединения, разбиения массивов, для сортировки и прочих операций. Функции по отдельности рассматривать пока не будем, потому что это скучно. Но знайте, что в документации PHP есть раздел с описанием функций для работы с массивами. Туда приходится обращаться часто, поскольку запомнить все функции совершенно нереально, а тем менее реально запомнить, какие параметры и в каком порядке надо передавать в каждую из них.