Функция 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
В этом примере $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() или требуется инвертировать маппинг — просто помните, что значения должны быть целыми числами или строками, а дублирующиеся значения сворачиваются к последнему ключу.