W3docs

Возможности PHP: функция array_fill_keys

Изучите PHP array_fill_keys(): создание ассоциативного array из списка ключей и общего значения, с примерами дубликатов и числовых ключей.

array_fill_keys() — встроенная функция PHP, которая создаёт новый ассоциативный array из списка ключей и единственного значения, присваиваемого каждому элементу. Это самый быстрый способ предварительно заполнить array, когда ключи уже известны, но все они должны начинаться с одного значения по умолчанию — например, для обнуления набора счётчиков, пометки списка элементов как false или создания слотов-заглушек, которые будут заполнены позже.

На этой странице описывается, что делает array_fill_keys(), её точное поведение с дублирующимися и числовыми ключами, чем она отличается от array_fill() и array_combine(), и когда её следует использовать.

Синтаксис

array_fill_keys(array $keys, mixed $value): array
ПараметрОписание
$keysArray значений, которые будут использоваться в качестве ключей нового array. Каждый элемент используется как ключ, а не как значение.
$valueЗначение, присваиваемое каждому ключу. Может быть любого типа — скаляр, null, array или object.

Возвращаемое значение: новый array, ключи которого берутся из $keys, а значения — все равны $value. Доступна начиная с PHP 5.2.0.

Ключи подчиняются стандартным правилам PHP для ключей array: допустимы только целые числа и string. Строка, похожая на десятичное целое число (например, "5"), приводится к целому 5, а ключи true/false/null становятся 1/0/"".

Базовый пример

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

php— editable, runs on the server

Результатом является ассоциативный array с вашими ключами, каждый из которых сопоставлен с одним и тем же значением:

Array
(
    [a] => value
    [b] => value
    [c] => value
)

Это удобно, когда у вас есть набор ключей, но значения либо пока не важны, либо все должны начинаться одинаково — распространённый случай: инициализация счётчиков значением 0:

<?php

$letters = array("a", "b", "c");
$counts = array_fill_keys($letters, 0);
$counts["a"]++;
$counts["a"]++;
$counts["c"]++;
print_r($counts);

?>
Array
(
    [a] => 2
    [b] => 0
    [c] => 1
)

Использование null, array или object в качестве значения

Значение для заполнения может быть любого типа. Используйте null для создания слотов-заглушек, которые вы заполните позже:

<?php

$keys = array("id", "status");
$filled = array_fill_keys($keys, null);
print_r($filled);

?>
Array
(
    [id] =>
    [status] =>
)

Если значение является array или object, оно копируется по значению в каждый ключ, поэтому изменение одного элемента никогда не влияет на остальные:

<?php

$buckets = array_fill_keys(array("a", "b"), array());
$buckets["a"][] = 1;
print_r($buckets);

?>
Array
(
    [a] => Array
        (
            [0] => 1
        )

    [b] => Array
        (
        )

)

Дублирующиеся и числовые ключи

Поскольку результат является настоящим PHP array, ключи подчиняются стандартным правилам. Дублирующиеся ключи сворачиваются в один элемент, а ключи в виде строк с десятичным числом преобразуются в целые:

<?php

print_r(array_fill_keys(array("5", 5, "name"), null));

?>
Array
(
    [5] =>
    [name] =>
)

Здесь "5" и 5 оба сохраняются как целочисленный ключ 5, поэтому в результате остаётся только одна запись с ключом 5. Учитывайте это, если список ключей может содержать дубликаты — array окажется короче входных данных.

array_fill_keys() и связанные функции

  • array_fill() заполняет диапазон последовательных целочисленных ключей, начиная с заданного смещения, а не из явного списка ключей. Используйте её, когда нужны индексы вида 0, 1, 2, ….
  • array_combine() объединяет array ключей с array значений равной длины, присваивая каждому ключу отдельное значение. Используйте array_fill_keys(), когда каждое значение одинаково.
  • array_keys() выполняет обратную операцию: извлекает ключи из существующего array.

Распространённый шаблон — задать значения по умолчанию с помощью array_fill_keys(), а затем объединить с реальными данными:

<?php

$defaults = array_fill_keys(array("name", "email", "active"), null);
$input = array("name" => "Ann", "active" => true);
print_r(array_merge($defaults, $input));

?>
Array
(
    [name] => Ann
    [email] =>
    [active] => 1
)

Это гарантирует наличие каждого ожидаемого ключа, даже если входные данные неполные.

Итоги

array_fill_keys() превращает список ключей и одно общее значение в готовый ассоциативный array. Применяйте её для инициализации счётчиков, флагов или записей-заглушек в одну строку. Помните, что значение для заполнения копируется в каждый ключ, а дублирующиеся или строковые десятичные ключи сворачиваются согласно стандартным правилам PHP для ключей array. Для разных значений по ключам используйте array_combine(); для последовательных целочисленных индексов — array_fill(). Смотрите руководство по array в PHP для общего понимания темы.

Практика

Практика
Для чего используется функция array_fill_keys() в PHP?
Для чего используется функция array_fill_keys() в PHP?
Was this page helpful?