Пары ключ-значение в 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]. Длина массивов должна совпадать, иначе возникнет ошибка.
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 оператор распаковывает массив, при этом ключи из более правого массива перезаписывают левые.