Индексированные массивы
Узнайте, как создавать и использовать индексированные массивы в PHP: доступ к элементам, изменение, добавление, подсчёт и перебор.
Индексированные массивы в PHP
Индексированный массив — это простейший вид массива в PHP: список значений, где каждому элементу автоматически присваивается числовой ключ (его позиция), начиная с 0. Используйте его всякий раз, когда вам нужна упорядоченная коллекция — список товаров, строки файла, строки результирующего набора — и вам не нужны смысловые имена для каждого элемента.
В PHP всего три типа массивов: индексированные массивы (числовые ключи, рассматриваются здесь), ассоциативные массивы (именованные строковые ключи) и многомерные массивы (массивы массивов). На этой странице рассматривается, как создавать индексированные массивы, читать, изменять, добавлять, считать и перебирать их значения.
Создание индексированного массива
Есть два эквивалентных способа создать индексированный массив. Короткий синтаксис [] (PHP 5.4+) — современная и предпочтительная форма; функция array() работает в любой версии PHP.
// Short syntax (recommended)
$cars = ["Volvo", "BMW", "Toyota"];
// Long syntax — identical result
$cars = array("Volvo", "BMW", "Toyota");В обоих случаях PHP назначает ключи самостоятельно: "Volvo" получает индекс 0, "BMW" — 1, а "Toyota" — 2. Пустой массив — просто $cars = [];, в него можно добавлять элементы позднее.
Доступ к значениям
Чтобы прочитать значение, укажите его индекс в квадратных скобках. Помните, что первый элемент находится по индексу 0, поэтому индекс последнего элемента всегда на единицу меньше количества элементов.
$cars = ["Volvo", "BMW", "Toyota"];
echo $cars[0]; // Volvo
echo $cars[2]; // ToyotaОбращение к несуществующему ключу (например $cars[9]) возвращает null и вызывает предупреждение Warning: Undefined array key — используйте in_array() или isset() для проверки наличия ключа, если вы в этом не уверены.
Изменение значений
Присвойте новое значение существующему индексу, чтобы заменить его на месте:
$cars = ["Volvo", "BMW", "Toyota"];
$cars[0] = "Mercedes";
echo $cars[0]; // MercedesМассив по-прежнему содержит три элемента; изменилось только значение по индексу 0.
Добавление значений
Чтобы добавить элемент в конец массива, присвойте значение с помощью синтаксиса пустых скобок [] — PHP автоматически выберет следующий доступный индекс. Функция array_push() делает то же самое и может добавить несколько значений за раз:
$cars = ["Volvo", "BMW", "Toyota"];
$cars[] = "Audi"; // index 3
array_push($cars, "Tesla", "Kia"); // indexes 4 and 5
print_r($cars);Вывод:
Array
(
[0] => Volvo
[1] => BMW
[2] => Toyota
[3] => Audi
[4] => Tesla
[5] => Kia
)Подсчёт элементов
Используйте count(), чтобы узнать, сколько элементов содержит массив — это полезно для отображения итогов или в качестве верхней границы цикла:
$cars = ["Volvo", "BMW", "Toyota"];
echo count($cars); // 3Перебор индексированного массива
Наиболее удобный способ обойти все значения — цикл foreach, который работает независимо от количества элементов:
$cars = ["Volvo", "BMW", "Toyota"];
foreach ($cars as $car) {
echo $car . PHP_EOL;
}Вывод:
Volvo
BMW
ToyotaЕсли вам также нужен индекс каждого элемента, захватите и ключ:
$cars = ["Volvo", "BMW", "Toyota"];
foreach ($cars as $index => $car) {
echo "$index: $car" . PHP_EOL;
}
// 0: Volvo
// 1: BMW
// 2: ToyotaКлассический цикл for — альтернатива, когда вам нужен явный числовой контроль:
$cars = ["Volvo", "BMW", "Toyota"];
for ($i = 0; $i < count($cars); $i++) {
echo $cars[$i] . PHP_EOL;
}Типичные ошибки
- Ключи не всегда последовательны. Удаление элемента с помощью
unset($cars[1])оставляет «дыру» — оставшиеся ключи сохраняются как0и2. Вызовитеarray_values()для переиндексации с0, если вам нужен чистый список. - Граница между индексированным и ассоциативным массивом размыта. Добавление строкового ключа (
$cars["best"] = "Volvo") превращает массив в смешанный/ассоциативный. Чтобы массив оставался чисто индексированным, добавляйте только элементы без ключей или с целочисленными ключами. - Сортировка переупорядочивает, иногда переиндексирует. Такие функции, как
sort(), переиндексируют массив с0, что обычно и нужно для индексированного списка.
Заключение
Индексированные массивы хранят упорядоченный список значений под автоматическими числовыми ключами, начиная с 0. Создаются они с помощью [], значения читаются и перезаписываются по индексу, добавляются с помощью $arr[] или array_push(), измеряются с помощью count() и перебираются с помощью foreach. Когда вам нужны именованные, а не позиционные данные, используйте ассоциативный массив.