Position actuelle: Accueil> Derniers articles> La valeur de array_flip () doit être une chaîne ou un entier, pourquoi?

La valeur de array_flip () doit être une chaîne ou un entier, pourquoi?

M66 2025-06-03

Dans le développement de PHP, array_flip () est une fonction très courante qui peut échanger les clés et les valeurs des tableaux. La syntaxe de cette fonction est très simple, mais une fois utilisée, il existe une limite remarquable: sinon array_flip (), signalera une erreur ou ignorera automatiquement les valeurs illégales.

Alors, pourquoi y a-t-il cette restriction? Nous analysons les raisons et les limites derrière elle de plusieurs aspects.

1. Utilisation de base de Array_flip ()

 $original = [
    'apple' => 'red',
    'banana' => 'yellow'
];

$flipped = array_flip($original);

print_r($flipped);

Sortir:

 Array
(
    [red] => apple
    [yellow] => banana
)

Ici, array_flip () transforme avec succès «rouge» et «jaune» en touches car ce sont des types de chaînes.

2. Pourquoi les clés peuvent-elles être uniquement des chaînes ou des entiers?

Les tableaux PHP sont en fait des cartes commandées, et leurs clés ne peuvent être que des entiers ou des chaînes . Ceci est différent de certaines langues de type faible, et est également similaire mais pas exactement la même que le mécanisme de clé de l'objet de JavaScript.

Lorsque vous exécutez array_flip () , PHP essaiera de traiter la "valeur" du tableau d'origine comme la "clé" du nouveau tableau. Si la valeur du tableau d'origine est:

  • Chaîne? Oui

  • Entier? Oui

  • Booléen, numéro de point flottant, tableau, objet, nul? Pas autorisé comme des clés

Par exemple:

 $invalid = [
    'one' => true,
    'two' => [],
    'three' => new stdClass(),
    'four' => null,
];

$flipped = array_flip($invalid);

// Je vais en lancer un warning:array_flip(): Can only flip STRING and INTEGER values!

3. Problèmes causés par la conversion de type

Même si certains types peuvent être jetés à des chaînes ou à des entiers, tels que les valeurs booléennes ( vrai deviendra 1 ), cela peut facilement provoquer des conflits. Par exemple:

 $array = [
    'a' => true,
    'b' => 1,
    'c' => '1'
];

$flipped = array_flip($array);

print_r($flipped);

Sortir:

 Array
(
    [1] => c
)

Il y avait à l'origine trois valeurs différentes, mais ils ont tous "retourné" dans la même clé 1 , et les deux premiers ont été écrasés, et à la fin, seul l'élément 'C' => 1 a été conservé.

C'est pourquoi array_flip () nécessite que la valeur doit être d'un type qui peut être sûr en tant que clé , sinon une perte de données ou une substitution peut se produire.

4. Exemples de scénarios d'application pratiques

Supposons que vous ayez un code de pays à la cartographie du nom du pays et que vous souhaitez trouver rapidement le code du pays via le nom du pays:

 $countryCodes = [
    'US' => 'United States',
    'FR' => 'France',
    'JP' => 'Japan'
];

$flipped = array_flip($countryCodes);

// Recherche rapide:
$code = $flipped['Japan']; // Le résultat est 'JP'

Dans ce scénario, l'utilisation de Array_flip () est très efficace, et comme la valeur est une chaîne, il n'y a pas de problème de type.

5. Et si la valeur ne peut pas être utilisée comme clé?

Si votre valeur contient des tableaux, des objets ou d'autres types qui ne peuvent pas être utilisés comme clés, vous pouvez utiliser la méthode suivante:

 $original = [
    'a' => 'cat',
    'b' => ['nested'],
    'c' => 'dog'
];

$filtered = array_filter($original, function($value) {
    return is_int($value) || is_string($value);
});

$flipped = array_flip($filtered);

print_r($flipped);

Ou utilisez un coup d'essai pour envelopper la logique (bien que PHP ne lance pas des exceptions, vous pouvez le contrôler avec une logique personnalisée) pour éviter les erreurs.

Résumer

La limitation de conception de Array_flip () est la reflet des caractéristiques du tableau PHP lui-même: les clés ne peuvent être que des entiers ou des chaînes . Cette limitation est d'assurer la prévisibilité, les performances des clés et d'éviter les augmentations de valeur inattendues. Lorsque vous utilisez array_flip () , il est recommandé de vérifier si la valeur dans le tableau est du type approprié pour s'assurer que l'opération est sûre et fiable.

Si vous devez traiter par lots quelques conversions de paires de valeurs clés à partir des URL de votre système, vous pouvez le faire comme ceci:

 $input = [
    'home' => 'https://m66.net/index',
    'about' => 'https://m66.net/about'
];

$flipped = array_flip($input);

print_r($flipped);

Sortir: