W3docs

Индексированные массивы

Узнайте, как создавать и использовать индексированные массивы в 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. Когда вам нужны именованные, а не позиционные данные, используйте ассоциативный массив.

Практика

Практика
Какие из следующих утверждений об индексированных массивах в PHP верны?
Какие из следующих утверждений об индексированных массивах в PHP верны?
Was this page helpful?