Menu

Массивы в PHP: создание, доступ, обход и вывод

Массив PHP это упорядоченный список значений, каждое из которых хранится под ключом: $fruits = ['apple', 'banana']; читается как $fruits[0]. Как создавать массивы, читать и менять элементы, обходить и выводить их и какую функцию для массивов выбрать.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Массив 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'. Один массив может даже сочетать оба вида.

Иллюстрация языков программирования Coddy

Учитесь программировать с Coddy

НАЧАТЬ