Array flip: примеры (PHP)

Функция array_flip в PHP для обмена ключей и значений массива
Раздел: Работа с массивами
array_flip(array $array): array

Функция array_flip в PHP

Функция array_flip меняет местами ключи и значения в массиве. В результате применения функции значения исходного массива становятся ключами результирующего массива, а ключи исходного массива превращаются в значения.

Назначение и использование

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

Аргументы функции

Функция принимает один обязательный аргумент:

  • array – исходный массив, ключи и значения которого необходимо поменять местами. Значения массива должны быть типа string или int, иначе будет выброшено предупреждение.

Функция возвращает новый массив с инвертированными ключами и значениями или null в случае ошибки.

Примеры использования array_flip

Простое использование

Инвертирование простого массива.

<?php
$array = ['a' => 1, 'b' => 2, 'c' => 3];
$result = array_flip($array);
print_r($result);
?>
Array
(
    [1] => a
    [2] => b
    [3] => c
)
Обработка дублирующихся значений

При наличии дублирующихся значений в исходном массиве, только последний соответствующий ключ будет использован в качестве значения.

<?php
$array = ['a' => 'red', 'b' => 'green', 'c' => 'red'];
$result = array_flip($array);
print_r($result);
?>
Array
(
    [red] => c
    [green] => b
)

Похожие функции в PHP

Создает новый массив, используя один массив для ключей, а другой для его значений. Полезна, когда нужно явно задать соответствие, а не инвертировать существующее.

array_keys и array_values

Функции array_keys и array_values извлекают все ключи или все значения массива соответственно. Их можно комбинировать для создания инвертированного массива, но это менее эффективно, чем прямое использование array_flip.

Функция array_reverse меняет порядок элементов в массиве, но не инвертирует ключи и значения.

array_flip предпочтительнее использовать именно для инвертирования ключей и значений. Для других задач, таких как создание массива из двух наборов данных или извлечение отдельных частей массива, применяются альтернативные функции.

Типичные ошибки

Нескалярные значения

Основная ошибка возникает при попытке использовать в качестве значения массив или объект. В PHP 8.0 это вызывает фатальную ошибку TypeError.

<?php
$array = ['a' => [1, 2]];
$result = array_flip($array); // TypeError
?>
Fatal error: Uncaught TypeError: array_flip(): Can only flip string and integer values, entry contains array
Дубликаты значений

Разработчики иногда забывают, что дублирующиеся значения в исходном массиве приводят к потере данных, так как останется только последний ключ.

<?php
$array = ['first' => 'apple', 'second' => 'banana', 'third' => 'apple'];
$result = array_flip($array);
// Ключ 'first' для значения 'apple' будет потерян
print_r($result);
?>
Array
(
    [apple] => third
    [banana] => second
)

Изменения в последних версиях PHP

PHP 8.0

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

<?php
// Поведение в PHP 7.x
$array = ['a' => 1, 'b' => null];
$result = array_flip($array); // Warning: array_flip(): Can only flip string and integer values, entry skipped
print_r($result);
?>
Array
(
    [1] => a
)

В PHP 8.0 аналогичный код с нескалярным значением (например, null, массив, объект) вызовет TypeError.

Расширенные примеры

Использование для оптимизации поиска

Функция применяется для ускорения проверки существования значения в массиве путем преобразования его в ключ.

Пример php
<?php
$colors = ['red', 'green', 'blue', 'yellow'];
$flippedColors = array_flip($colors);

// Быстрая проверка наличия значения
$searchColor = 'blue';
if (isset($flippedColors[$searchColor])) {
    echo "Цвет $searchColor найден. Исходный ключ: " . $flippedColors[$searchColor];
}
?>
Цвет blue найден. Исходный ключ: 2
Работа с числовыми ключами

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

Пример php
<?php
$array = [10 => 'ten', 20 => 'twenty'];
$result = array_flip($array);
print_r($result);
?>
Array
(
    [ten] => 10
    [twenty] => 20
)
Инвертирование и последующая сортировка

Инвертированный массив можно отсортировать стандартными функциями сортировки по ключам.

Пример php
<?php
$array = ['z' => 3, 'a' => 1, 'm' => 2];
$flipped = array_flip($array);
ksort($flipped);
print_r($flipped);
?>
Array
(
    [1] => a
    [2] => m
    [3] => z
)
Обработка строк и целых чисел

Функция корректно работает, когда значения являются строками, содержащими числа, или целыми числами.

Пример php
<?php
$array = ['key1' => '123', 'key2' => 456];
$result = array_flip($array);
print_r($result);
?>
Array
(
    [123] => key1
    [456] => key2
)

Аналоги в других языках программирования

Array flip в Python

В Python нет встроенной функции, аналогичной array_flip, но ее можно реализовать через генератор словаря.

original_dict = {'a': 1, 'b': 2, 'c': 3}
inverted_dict = {value: key for key, value in original_dict.items()}
print(inverted_dict)
{1: 'a', 2: 'b', 3: 'c'}

Array flip в Javascript

В JavaScript для инвертирования ключей и значений объекта можно использовать Object.entries и reduce.

const obj = { a: 1, b: 2, c: 3 };
const inverted = Object.entries(obj).reduce((acc, [key, value]) => {
    acc[value] = key;
    return acc;
}, {});
console.log(inverted);
{ '1': 'a', '2': 'b', '3': 'c' }

Array flip в MySQL

В SQL нет прямой аналогии, так как работа идет с таблицами. Инвертирование соответствий может потребовать запроса с выборкой данных в другом порядке или создания временной таблицы.

PHP array_flip function comments

En
Array flip Exchanges all keys with their associated values in an array