W3docs

Функция array_flip в PHP

Функция PHP array_flip обменивает ключи и значения массива. Синтаксис, примеры, обработка дубликатов и связанные функции.

Функция PHP array_flip меняет местами ключи и значения массива: каждый ключ становится значением, а каждое значение — ключом. Она возвращает новый массив и никогда не изменяет переданный ей. На этой странице рассматриваются синтаксис, рабочий пример, поведение при дубликатах и различных типах ключей, типичные варианты применения и связанные функции.

Синтаксис

array_flip(array $array): array
  • $array — входной массив. Его значения должны быть допустимыми ключами, то есть могут быть только целыми числами или строками. Любой другой тип (boolean, float, array, object, null) вызывает предупреждение, и такое значение пропускается в результате.
  • Возвращаемое значение — новый массив с переставленными парами ключ/значение.

Использование функции array_flip

Передайте массив в функцию, и она вернёт перевёрнутый массив:

Пример использования функции array_flip в PHP

php— editable, runs on the server

В этом примере $flipped_array будет содержать следующее:

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

Строковые ключи "a", "b", "c" теперь являются значениями, а целые числа 1, 2, 3 — ключами.

Преимущества использования функции array_flip в PHP

Использование array_flip в PHP-коде даёт ряд преимуществ:

  • Упрощение кода: array_flip позволяет избавиться от необходимости вручную менять местами ключи и значения в массиве.
  • Улучшение читаемости: перевёрнутые массивы зачастую проще читать и понимать, особенно при работе с большими массивами или массивами со сложными структурами данных.
  • Оптимизированное выполнение: array_flip — встроенная функция, оптимизированная для данной задачи; как правило, она быстрее ручных циклов с заменой ключей и значений.

Создание быстрой таблицы поиска

Наиболее идиоматичное применение array_flip — превращение списка значений в множество, по которому можно делать запросы с помощью isset(). Поскольку ключи хешируются, проверка isset() на перевёрнутом массиве выполняется за O(1) — это значительно быстрее, чем перебор списка через in_array() на большом наборе данных.

<?php

$allowed = ["admin", "editor", "viewer"];
$lookup  = array_flip($allowed);

var_dump(isset($lookup["editor"])); // present
var_dump(isset($lookup["guest"]));  // missing

?>

Вывод:

bool(true)
bool(false)

Обработка дублирующихся значений

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

<?php

$colors = ["red", "green", "blue", "green"];
print_r(array_flip($colors));

?>

Вывод:

Array
(
    [red] => 0
    [green] => 3
    [blue] => 2
)

Индекс 1 (первый "green") теряется, потому что его перезаписал индекс 3. Если вам нужно подсчитать, сколько раз встречается каждое значение, используйте array_count_values(); для удаления дубликатов с сохранением порядка воспользуйтесь array_unique().

Типичные варианты применения

  • Создание множеств поиска из списков уникальных идентификаторов или допустимых значений для быстрых проверок через isset().
  • Инвертирование словаря или маппинга (например, name => id в id => name).
  • Переупорядочивание элементов массива в ключи с сохранением их исходной позиции.

Ограничения и подводные камни

  • Дублирующиеся значения: для повторяющегося значения сохраняется только последний ключ; более ранние ключи теряются (см. выше).
  • Недопустимые типы значений: значения, не являющиеся int или string, не могут стать ключами. Они вызывают предупреждение Warning: Can only flip string and integer values и пропускаются, тогда как допустимые пары всё равно переворачиваются.
  • Числовые строковые ключи: когда значение становится ключом, PHP применяет обычные правила ключей массива — числовая строка вида "42" преобразуется в целое число 42.

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

  • array_reverse() — разворачивает порядок элементов (часто путают с обменом ключей/значений).
  • array_keys() и array_values() — извлекают только ключи или только значения.
  • array_search() — находит ключ для одного значения без переворота всего массива.
  • array_combine() — строит массив, объединяя один массив ключей с одним массивом значений.

Для более глубокого изучения массивов в целом смотрите PHP Arrays и Associative Arrays.

Заключение

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

Практика

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