Пары ключ-значение в PHP: основы создания

Раздел: Основы PHP -> Массивы и ключи

Пара ключ-значение в PHP: обзор возможностей

Как создать ассоциативный массив с парами ключ-значение?

Основной и наиболее эффективный способ — использование синтаксиса квадратных скобок:

<?php
$user = [
    'name' => 'Иван',
    'age' => 25,
    'city' => 'Москва'
];
?>

Такой массив позволяет хранить данные с понятными строковыми ключами. Ключи могут быть строками или целыми числами. Значения — любого типа.

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

  • Обращение к несуществующему ключу вызывает ошибку Notice: Undefined index. Следует проверять через isset($arr['key']) или array_key_exists('key', $arr).
  • Ключи с целыми числами (например, 1) могут быть перепутаны со строковыми '1'. PHP автоматически приводит строковые целочисленные ключи к integer.

Для добавления новой пары используется присваивание: $array['new_key'] = value;. Для удаления — unset($array['key']);.

Как создать массив с помощью старого синтаксиса array()?

В ранних версиях PHP использовалась конструкция array():

<?php
$colors = array('red' => '#FF0000', 'green' => '#00FF00');
?>

Этот способ полностью эквивалентен квадратным скобкам, но менее лаконичен. Рекомендуется использовать современный синтаксис.

Проблем не возникает, но стиль кода считается устаревшим в сообществе.

Как быстро создать ассоциативный массив из переменных?

Функция compact() создает массив, используя имена переменных как ключи:

<?php
$id = 101;
$title = 'Статья';
$content = 'Текст...';
$article = compact('id', 'title', 'content');
print_r($article);
?>

Результат: массив с ключами 'id', 'title', 'content' и соответствующими значениями. Удобно для получения структуры из набора переменных.

Предупреждение: если переменная не определена, будет сгенерирована ошибка. Нельзя задать другие ключи, кроме имен переменных.

Как объединить два массива в ассоциативный массив?

Функция array_combine() принимает два массива: один для ключей, другой для значений:

<?php
$keys = ['a', 'b', 'c'];
$values = [1, 2, 3];
$combined = array_combine($keys, $values);
print_r($combined);
?>

Результат: ['a' => 1, 'b' => 2, 'c' => 3]. Длина массивов должна совпадать, иначе возникнет ошибка.

Если количество элементов отличается, PHP выдаст предупреждение и вернет false. Необходимо проверять длину перед вызовом.

Как извлечь значения по ключам в переменные с продвинутым синтаксисом?

Начиная с PHP 7.1, можно использовать синтаксис ['key1' => $var1, 'key2' => $var2] для присваивания:

<?php
$arr = ['x' => 10, 'y' => 20, 'z' => 30];
['x' => $a, 'z' => $c] = $arr;
echo $a; // 10
echo $c; // 30
?>

Это удобно для деструктуризации ассоциативных массивов. Можно указать только нужные ключи.

Если ключ отсутствует в массиве, будет присвоено null и может появиться предупреждение. В PHP 8.0+ это вызывает ошибку. Требуется проверка на существование ключа.

Как создать массив с одинаковыми значениями для заданных ключей?

Функция array_fill_keys() заполняет массив, используя указанные ключи и одно значение:

<?php
$keys = ['a', 'b', 'c'];
$result = array_fill_keys($keys, 0);
print_r($result); // ['a' => 0, 'b' => 0, 'c' => 0]
?>

Полезно для инициализации полей с одинаковыми значениями.

Если ключи повторяются, последний перезапишет предыдущие, так как массив не допускает дубликатов ключей.

Дополнительные примеры с парами ключ-значение

1. Сортировка ассоциативного массива по ключам и значениям

Пример
<?php
$data = ['z' => 3, 'a' => 1, 'c' => 2];
ksort($data); // сортировка по ключам
print_r($data);
?>
Array
(
    [a] => 1
    [c] => 2
    [z] => 3
)

Для сортировки по значениям используется asort(). Сортировка сохраняет связь ключ-значение.

Пример
<?php
$data = ['z' => 3, 'a' => 1, 'c' => 2];
asort($data);
print_r($data);
?>
Array
(
    [a] => 1
    [c] => 2
    [z] => 3
)

2. Использование array_walk с передачей ключа в callback

Пример
<?php
$items = ['apple' => 3, 'banana' => 5, 'cherry' => 2];
array_walk($items, function($value, $key) {
    echo "$key: $value шт.
";
});
?>
apple: 3 шт.
banana: 5 шт.
cherry: 2 шт.

Callback получает значение и ключ. Можно изменять значения по ссылке.

3. Использование array_map с ключами через array_keys и array_combine

Пример
<?php
$data = ['width' => 100, 'height' => 200];
$multiplied = array_combine(
    array_keys($data),
    array_map(fn($v) => $v * 2, array_values($data))
);
print_r($multiplied);
?>
Array
(
    [width] => 200
    [height] => 400
)

Функция array_map не сохраняет ключи, поэтому требуется комбинирование.

4. Многомерные ассоциативные массивы и доступ к вложенным ключам

Пример
<?php
$matrix = [
    'row1' => ['col1' => 1, 'col2' => 2],
    'row2' => ['col1' => 3, 'col2' => 4]
];
echo $matrix['row1']['col2']; // 2
?>

Такой подход удобен для табличных данных или конфигураций.

5. Фильтрация с использованием ключей (array_filter с ARRAY_FILTER_USE_BOTH)

Пример
<?php
$values = ['a' => 1, 'b' => -2, 'c' => 3];
$filtered = array_filter($values, function($v, $k) {
    return $v > 0 && $k !== 'c';
}, ARRAY_FILTER_USE_BOTH);
print_r($filtered);
?>
Array
(
    [a] => 1
)

6. Извлечение части массива с сохранением ключей (array_slice)

Пример
<?php
$assoc = ['x' => 10, 'y' => 20, 'z' => 30, 'w' => 40];
$slice = array_slice($assoc, 1, 2, true);
print_r($slice);
?>
Array
(
    [y] => 20
    [z] => 30
)

Параметр true сохраняет исходные ключи.

7. Извлечение значений по ключу из массива массивов (array_column)

Пример
<?php
$users = [
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 2, 'name' => 'Bob']
];
$names = array_column($users, 'name', 'id');
print_r($names);
?>
Array
(
    [1] => Alice
    [2] => Bob
)

Третий аргумент определяет ключи результирующего массива.

8. Рекурсивное слияние ассоциативных массивов (array_merge_recursive)

Пример
<?php
$default = ['color' => 'red', 'size' => 'M'];
$custom = ['color' => 'blue', 'weight' => 10];
$merged = array_merge_recursive($default, $custom);
print_r($merged);
?>
Array
(
    [color] => Array
        (
            [0] => red
            [1] => blue
        )
    [size] => M
    [weight] => 10
)

Значения с одинаковыми строковыми ключами объединяются в массивы.

9. Преобразование объекта в ассоциативный массив

Пример
<?php
$obj = new stdClass();
$obj->a = 1;
$obj->b = 2;
$arr = json_decode(json_encode($obj), true);
print_r($arr);
?>
Array
(
    [a] => 1
    [b] => 2
)

Метод удобен для конвертации, но неэффективен для больших данных.

10. Использование spread оператора для слияния массивов (PHP 8.1+)

Пример
<?php
$first = ['a' => 1, 'b' => 2];
$second = ['b' => 3, 'c' => 4];
$result = ['a' => 0, ...$first, ...$second]; // перезапись:
print_r($result);
?>
Array
(
    [a] => 1
    [b] => 3
    [c] => 4
)

Spread оператор распаковывает массив, при этом ключи из более правого массива перезаписывают левые.

- Php ключ значение (пара ключ-значение в php)

Пара ключ-значение в PHP - comments

En
Php ключ значение (php)