W3docs

Ассоциативные массивы в PHP

Ассоциативные массивы PHP: создание, чтение, обновление, перебор foreach, сортировка по ключу и значению, типичные ошибки.

Ассоциативный array в PHP хранит значения под именованными ключами вместо числовых позиций. Там, где индексированный array отвечает на вопрос «что находится на позиции 2?», ассоциативный array отвечает на вопрос «какое значение у ключа email?» — именно так моделируются записи, конфигурации и справочники в реальном коде.

В этой главе рассказывается, как создавать ассоциативные массивы, читать и обновлять их, перебирать в цикле, сортировать по ключу или значению и избегать типичных ошибок, с которыми сталкиваются новички.

Что такое ассоциативный array?

Ассоциативный array — это array, элементы которого доступны по строковому ключу (иначе называемому индексом), а не по целочисленной позиции. Каждый ключ должен быть уникальным — присвоение значения существующему ключу перезаписывает старое значение.

$user = [
    "name"  => "Alice",
    "email" => "[email protected]",
    "age"   => 30,
];

Внутри PHP имеет только один тип array. «Индексированный» array — это просто ассоциативный array, ключами которого оказываются целые числа 0, 1, 2, …. Поэтому в одном array можно свободно смешивать строковые и целочисленные ключи.

Создание ассоциативного array

Есть два равнозначных способа. Синтаксис с короткими скобками [] (PHP 5.4+) предпочтителен в современном коде; функция array() даёт тот же результат.

// Short array syntax (recommended)
$fruits = ["apple" => "red", "banana" => "yellow", "grapes" => "green"];

// Long syntax — identical result
$fruits = array("apple" => "red", "banana" => "yellow", "grapes" => "green");

Можно также добавлять ключи по одному — это удобно при построении array в цикле:

$prices = [];
$prices["coffee"] = 2.5;
$prices["tea"]    = 2.0;

Порядок, в котором назначаются ключи, сохраняется — PHP arrays запоминают порядок вставки, поэтому при последующем переборе coffee окажется перед tea.

Доступ к значениям

Читайте значение по ключу в квадратных скобках:

$fruits = ["apple" => "red", "banana" => "yellow"];
echo $fruits["apple"]; // red

Если ключ не существует, PHP выдаёт предупреждение и возвращает null. Чтобы читать безопасно, сначала проверьте наличие с помощью array_key_exists() или используйте оператор объединения с null ?? для задания значения по умолчанию:

$color = $fruits["mango"] ?? "unknown";
echo $color; // unknown — no warning

Добавление и изменение значений

Присвоение по ключу либо обновляет существующий элемент, либо добавляет новый:

$fruits = ["apple" => "red"];

$fruits["apple"]  = "green"; // modify existing key
$fruits["cherry"] = "dark red"; // add a new key

print_r($fruits);
// Array ( [apple] => green [cherry] => dark red )

Удалить элемент можно с помощью unset():

unset($fruits["apple"]);

Перебор ассоциативного array

Обычный цикл for здесь не подходит, поскольку нет последовательных числовых индексов. Используйте foreach с формой key => value для обхода как ключей, так и значений:

$user = ["name" => "Alice", "email" => "[email protected]", "age" => 30];

foreach ($user as $field => $value) {
    echo "$field: $value\n";
}
// name: Alice
// email: [email protected]
// age: 30

Сортировка ассоциативных массивов

Поскольку ключи несут смысловую нагрузку, для сортировки используются функции, сохраняющие связь ключ/значениеsort() уничтожила бы ключи. Используйте:

  • ksort() / krsort() — сортировка по ключу по возрастанию / убыванию
  • asort() / arsort() — сортировка по значению по возрастанию / убыванию
$scores = ["Bob" => 75, "Alice" => 90, "Carol" => 82];

arsort($scores); // sort by value, highest first

foreach ($scores as $name => $score) {
    echo "$name: $score\n";
}
// Alice: 90
// Carol: 82
// Bob: 75

Полный набор функций сортировки см. в разделе Сортировка массивов в PHP.

Типичные ошибки

  • Повторное использование ключа перезаписывает значение без предупреждения. ["a" => 1, "a" => 2] даёт ["a" => 2] — ошибки нет, первое значение теряется.
  • Числовые строковые ключи преобразуются в целые числа. ["10" => "x"] хранится под целочисленным ключом 10. $arr["10"] и $arr[10] ссылаются на один и тот же элемент.
  • Ключи true/false/null приводятся к типу. Ключ true становится 1, false и null0 и "". Используйте в качестве ключей только обычные строки и целые числа.
  • Не полагайтесь на for ($i = 0; …). Используйте foreach, array_keys() или array_values() для перебора, когда ключи не являются последовательностью 0..n.

Заключение

Ассоциативные массивы позволяют хранить данные под осмысленными уникальными строковыми ключами — идеально для записей, настроек и справочных таблиц. Читайте с помощью $arr["key"] (защищайтесь от отсутствующих ключей оператором ??), обновляйте или добавляйте элементы присвоением, удаляйте через unset(), перебирайте с foreach и сортируйте функциями, сохраняющими ключи, такими как ksort() и asort().

Для дальнейшего изучения исследуйте индексированные массивы, многомерные массивы (массивы из ассоциативных массивов) и array_keys() для извлечения всех ключей сразу.

Практика

Практика
Что верно об ассоциативных массивах в PHP?
Что верно об ассоциативных массивах в PHP?
Was this page helpful?