Массивы в 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 есть раздел с описанием функций для работы с массивами. Туда приходится обращаться часто, поскольку запомнить все функции совершенно нереально, а тем менее реально запомнить, какие параметры и в каком порядке надо передавать в каждую из них.

Раздел:

Темы: