W3docs

Функция array_combine() в PHP

Функция array_combine() в PHP объединяет два массива в один ассоциативный, используя значения первого в качестве ключей, а второго — в качестве значений.

Функция array_combine() в PHP объединяет два плоских массива в один ассоциативный массив: она берёт значения первого массива в качестве ключей, а значения второго массива — в качестве значений. Это идеальный инструмент, когда у вас есть два параллельных массива — например, список названий столбцов и список значений ячеек, совпадающих по позиции, — и вы хотите объединить их в единую карту ключ/значение.

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

Синтаксис

array_combine(array $keys, array $values): array
ПараметрОписание
$keysArray, значения которого становятся ключами результата. Его значения должны быть допустимыми ключами массива (целые числа или string).
$valuesArray, значения которого становятся значениями результата.

Возвращаемое значение: новый ассоциативный array, построенный путём сопоставления каждого элемента $keys с элементом $values на той же позиции.

Начиная с PHP 8.0, передача массивов разной длины вызывает исключение ValueError. В PHP 7.x и более ранних версиях функция возвращала false и генерировала предупреждение.

Базовое использование

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

php— editable, runs on the server

Результат вывода:

Array
(
    [Product 1] => 10
    [Product 2] => 20
    [Product 3] => 30
)

Объединение выполняется по позиции, а не по сортировке или совпадению — первый ключ сопоставляется с первым значением, второй — со вторым, и так далее.

Формирование записи из заголовков и данных

Часто встречающийся практический случай — восстановление ассоциативной записи из строки заголовков CSV-формата и строки данных. Именно так можно сопоставить одну строку разобранного CSV-файла.

<?php

$headers = array("id", "name", "email");
$row     = array(101, "Ann", "[email protected]");

$record = array_combine($headers, $row);

echo $record["name"] . " <" . $record["email"] . ">";

Результат:

Ann <[email protected]>

Правила и подводные камни

Помните об этих ограничениях:

  • Одинаковая длина обязательна. $keys и $values должны содержать одинаковое количество элементов. В PHP 8+ несовпадение вызывает ValueError; используйте проверку count($keys) === count($values), если длина заранее неизвестна.
  • Ключи должны быть допустимыми. Значения, используемые как ключи, должны быть целыми числами или string. Числа с плавающей точкой усекаются до целых, boolean приводятся к 0/1, а null становится пустой строкой "".
  • Дублирующиеся ключи перезаписываются. Если array $keys содержит повторяющиеся значения, последующие пары перезаписывают предыдущие, и результат может оказаться короче входных данных. Чтобы заранее узнать количество уникальных ключей, используйте array_unique().
  • Используются только значения. Исходные ключи обоих входных массивов игнорируются — имеют значение только их значения.

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

<?php

$keys   = array("a", "b", "a");
$values = array(1, 2, 3);

print_r(array_combine($keys, $values));

Последнее "a" => 3 перезаписывает первое, поэтому результат:

Array
(
    [a] => 3
    [b] => 2
)

Связанные функции

  • array_merge() — объединяет массивы путём добавления значений, а не сопоставления ключей со значениями.
  • array_flip() — меняет местами ключи и значения одного массива.
  • array_keys() и array_values() — обратная операция: извлекают ключи или значения из ассоциативного массива.

Заключение

array_combine() — самый удобный способ объединить два параллельных массива в ассоциативный, сопоставляя их поэлементно. Запомните два правила, которые чаще всего вызывают затруднения: массивы должны быть одинаковой длины (иначе в PHP 8+ возникает ValueError), а дублирующиеся ключи молча перезаписывают друг друга.

Практика

Практика
Какова основная функция array_combine() в PHP?
Какова основная функция array_combine() в PHP?
Was this page helpful?