PHP: работа с массивами

Массив - это упорядоченное отображение, которое устанавливает соответствие между значением и ключом. В PHP этот тип данных оптимизирован в нескольких направлениях, поэтому вы можете использовать его как собственно массив, список (вектор), хеш-таблицу (являющуюся реализацией карты), словарь, коллекцию, стек, очередь и, возможно, что-то ещё. Так как значением массива может быть другой массив PHP, можно также создавать деревья и многомерные массивы.

Синтаксис

Определение при помощи array()
Массив (тип array) может быть создан языковой конструкцией array(). В качестве параметров она принимает любое количество разделённых запятыми пар key => value (ключ => значение).

$arr = array(
    key  => value,
    key2 => value2,
    key3 => value3,
    ...
)

Запятая после последнего элемента массива необязательна и может быть опущена. Обычно это делается для однострочных массивов, то есть array(1, 2) предпочтительней array(1, 2, ). Для многострочных массивов с другой стороны обычно используется завершающая запятая, так как позволяет легче добавлять новые элементы в конец массива.

Определение при помощи [ ]
Начиная с версии PHP 5.4, массивы можно создать через квадратные скобки:

$arr = [ 1 => "php", 2 => "laravel", 3 => "zend"];

Пример определения массива используя разный синтаксис

$arr = array(
    "foo" => "bar",
    "bar" => "foo",
);
 
// Использование синтаксиса короткого массива
$arr = [
    "foo" => "bar",
    "bar" => "foo",
];

Ограничения определения массива

Ключ (кey) в массиве может быть либо тип int, либо тип string. Значение (value) может быть любого типа.

Дополнительно с ключом key будут сделаны следующие преобразования:

  • Строки (string), содержащие целое число (int) (исключая случаи, когда число предваряется знаком +) будут преобразованы к типу int. Например, ключ со значением "8" будет в действительности сохранён со значением 8. С другой стороны, значение "08" не будет преобразовано, так как оно не является корректным десятичным целым.
  • Числа с плавающей точкой (float) также будут преобразованы к типу int, то есть дробная часть будет отброшена. Например, ключ со значением 8.7 будет в действительности сохранён со значением 8.
  • Тип bool также преобразовываются к типу int. Например, ключ со значением true будет сохранён со значением 1 и ключ со значением false будет сохранён со значением 0.
  • Тип null будет преобразован к пустой строке. Например, ключ со значением null будет в действительности сохранён со значением "".
  • Массивы (array) и объекты (object) не могут использоваться в качестве ключей. При подобном использовании будет генерироваться предупреждение: Недопустимый тип смещения (Illegal offset type).
  • Если несколько элементов в объявлении массива используют одинаковый ключ, то только последний будет использоваться, а все другие будут перезаписаны.

Массивы в PHP могут содержать ключи типов int и string одновременно, так как PHP не делает различия между индексированными и ассоциативными массивами.

Доступ к элементам массива

Доступ к элементам массива может быть осуществлён с помощью синтаксиса array[key].

Пример обращения к значениям массива

$arr = array(
    "foo" => "bar",
    42    => 24,
    "multi" => array(
         "dimensional" => array(
             "array" => "foo"
         )
    )
);
 
print ($arr["foo"]);
print ($arr[42]);
print ($arr["multi"]["dimensional"]["array"]);

Существующий массив может быть изменён путём явной установкой значений в нем.
Это выполняется присвоением значений массиву (array) с указанием в скобках ключа.

$arr[key] = value;

Удаление элементов и всего массива

Если необходимо удалить пару ключ/значение, то необходимо использовать функцию unset().

$arr = array(5 => 1, 12 => 2);
 
$arr[] = 56;    // В этом месте скрипта это
                // то же самое, что и $arr[13] = 56;
 
$arr["x"] = 42; // Это добавляет к массиву новый
                // элемент с ключом "x"
 
unset($arr[5]); // Это удаляет элемент из массива
 
unset($arr);    // Это удаляет массив полностью

Функции для работы с массивами

Для работы с массивами существует достаточное количество полезных функций. Смотрите раздел функции для работы с массивами.

Направление: