Массив PHP хранит список значений под ключами. Создайте его квадратными скобками, $fruits = ['apple', 'banana', 'cherry'];, и читайте элемент по индексу, $fruits[0]. Индексы начинаются с 0, а count($fruits) даёт число элементов.
Любой массив PHP это упорядоченный словарь: каждое значение лежит под ключом. Если ключи не выбираете вы, PHP нумерует их 0, 1, 2..., и получается индексный массив. Если выбираете сами (['name' => 'Ada']), получается ассоциативный массив. Оба это один и тот же тип array.
Создание массива
Обычный синтаксис это квадратные скобки. array() это старое написание, которое даёт ровно то же самое. range() строит список чисел или букв, а array_fill() повторяет одно значение.
Массив PHP может одновременно хранить значения разных типов, в том числе другие массивы. Массив массивов это многомерный массив, обычный способ хранить строки данных.
Первый и последний элемент
Отрицательных индексов в PHP нет. $arr[-1] не означает "последний": он ищет ключ с именем -1, а если такого нет, PHP печатает Warning: Undefined array key -1. Используйте array_key_first() и array_key_last(), они работают и тогда, когда ключи начинаются не с 0.
end($queue) тоже возвращает последнее значение, но попутно сдвигает внутренний указатель массива, поэтому вариант через ключ понятнее.
Вывод массива
echo $arr не работает: печатает слово Array и предупреждение. Выберите вывод под задачу:
print_r($arr)для читаемого дампа при отладке.var_dump($arr), чтобы видеть ещё тип и длину каждого значения.implode(', ', $arr), чтобы превратить значения в одну строку для показа.json_encode($arr), чтобы отправить массив в JavaScript или API.
Параметры форматирования, включая вывод массива внутри HTML, описаны на странице про print_r и var_dump.
Обход массива
foreach это цикл, созданный для массивов: он отдаёт каждое значение, а если попросить, то и ключ. Цикл for с индексом тоже работает для индексных массивов, ключи которых идут от 0 без пропусков.
Массивы копируются, а не разделяются
Присваивание массива другой переменной или передача его в функцию даёт копию. Изменение копии не трогает оригинал. Добавьте & к параметру, когда функция должна менять массив вызывающего кода.
Функции для массивов по задачам
В PHP больше 70 функций для массивов. Вот те, которыми вы будете пользоваться чаще всего, у каждой своя страница:
| Задача | Функция |
|---|---|
| Добавить в конец | array_push() или $arr[] = |
| Число элементов | count() |
| Проверить, есть ли значение | in_array() |
| Найти ключ значения | array_search() |
| Проверить, есть ли ключ | array_key_exists() |
| Объединить массивы | array_merge() |
| Преобразовать каждое значение | array_map() |
| Оставить часть значений | array_filter() |
| Отсортировать | sort(), usort() и другие |
| Удалить элемент | unset(), array_splice() |
| Взять часть | array_slice() |
| Удалить дубликаты | array_unique() |
| Строку в массив и обратно | explode(), implode() |
Ключи, которые молча сливаются
Ключи массива бывают либо целыми числами, либо строками, и некоторые ключи PHP преобразует сам. Строка, похожая на целое десятичное число, например "1", становится целым 1, поэтому $a["1"] и $a[1] это одна и та же ячейка. "01" и "1.5" остаются строками. Поэтому в массиве, собранном из данных формы или CSV, может оказаться меньше элементов, чем вы ожидали.
Часто задаваемые вопросы
Как создать массив в PHP?
Используйте квадратные скобки: $colors = ['red', 'green', 'blue'];. Пустой массив это $items = [];. Старый синтаксис array('red', 'green') делает то же самое и по-прежнему работает.
Как вывести массив в PHP?
echo не умеет выводить массив (печатает слово Array и предупреждение). Используйте print_r($arr) для читаемого дампа, var_dump($arr), чтобы видеть ещё и типы, или echo implode(', ', $arr), чтобы вывести значения одной строкой.
Как получить последний элемент массива в PHP?
Используйте $arr[array_key_last($arr)] (PHP 7.3+) или end($arr). Отрицательных индексов в PHP нет: $arr[-1] ищет ключ с именем -1, которого обычно не существует.
Массивы PHP передаются по значению или по ссылке?
По значению. $b = $a; даёт $b собственную копию, поэтому изменение $b не меняет $a. Чтобы изменить массив вызывающего кода внутри функции, объявите параметр ссылкой: function add(array &$list).
Чем индексный массив отличается от ассоциативного в PHP?
Это один и тот же тип. У индексного массива целочисленные ключи 0, 1, 2..., которые PHP назначает сам; ассоциативный использует ключи, которые выбираете вы, обычно строки вроде 'name'. Один массив может даже сочетать оба вида.