Position actuelle: Accueil> Derniers articles> Comment inverser élégamment un tableau de valeurs d'énumération à l'aide d'Array_flip ()

Comment inverser élégamment un tableau de valeurs d'énumération à l'aide d'Array_flip ()

M66 2025-06-03

Dans le développement quotidien de PHP, nous rencontrons souvent une conversion mutuelle entre les "valeurs d'énumération? Tags". Par exemple, un tableau de statut de commande:

 $statusMap = [
    0 => 'Être payé',
    1 => 'Payé',
    2 => 'Expédié',
    3 => 'Complété',
];

Cette structure facilite l'extraction des descriptions de texte correspondantes à partir du code d'état. Mais parfois, nous devons également faire fonctionner l'inverse, comme supprimer son code d'état correspondant 2 sur la base de "expédié". Pour le moment, s'il n'y a pas de support structurel supplémentaire, vous devrez peut-être traverser l'ensemble du tableau et écrire une logique similaire:

 function getStatusCode($label) {
    foreach ($statusMap as $code => $desc) {
        if ($desc === $label) {
            return $code;
        }
    }
    return null;
}

Il a l'air un peu long. À l'heure actuelle, la fonction Array_flip () fournie avec PHP est utile!

Qu'est-ce que Array_flip () ?

array_flip () est une fonction intégrée dans PHP qui est utilisée pour coupler la "clé" et les valeurs d'un tableau:

 array_flip(array $array): array

Notes:

  • La valeur du tableau doit être unique et des valeurs scalaires qui peuvent être utilisées comme clés (telles que des chaînes ou des entiers).

  • S'il y a des valeurs en double, les éléments suivants écraseront le précédent.

Utilisez array_flip () pour implémenter l'inversion de la valeur d'énumération

Jetons un coup d'œil à inverser gracieusement un tableau de valeurs d'énumération:

 $statusMap = [
    0 => 'Être payé',
    1 => 'Payé',
    2 => 'Expédié',
    3 => 'Complété',
];

$labelToCodeMap = array_flip($statusMap);

echo $labelToCodeMap['Expédié']; // Sortir 2

Est-ce beaucoup plus simple en un instant? Il ne faut qu'une seule fois Array_flip () pour obtenir une table de mappage de "Label" à "Value".

Cas pratique: Conversion de valeur de l'option de chute de formulaire

Supposons que vous ayez une énumération des options de genre utilisateur:

 $genderMap = [
    'M' => 'mâle',
    'F' => 'femelle',
    'O' => 'autre',
];

Lors de la soumission du formulaire, l'utilisateur sélectionne «Femme» , que vous souhaitez reconvertir en «F» et stocker dans la base de données:

 $input = 'femelle';
$labelToValue = array_flip($genderMap);
$genderCode = $labelToValue[$input] ?? null;

if ($genderCode === null) {
    echo "Valeur de genre illégale";
} else {
    // Supposons qu'il soit enregistré dans la base de données
    saveGenderToDB($genderCode);
}

Non seulement le code est plus compact, mais la logique est également très claire et facile à comprendre.

Conseils pour l'utilisation: tableau inversé de cache

Si vous avez besoin d'utiliser des tableaux inversés à plusieurs endroits, vous pourriez aussi bien définir une méthode commune dans votre projet:

 function getFlippedMap(array $map): array {
    static $cache = [];

    $hash = md5(json_encode($map));
    if (!isset($cache[$hash])) {
        $cache[$hash] = array_flip($map);
    }

    return $cache[$hash];
}

De cette façon, même si vous l'appelez plusieurs fois, les résultats d'inversion existants peuvent être réutilisés pour améliorer les performances.

Remarque: les valeurs doivent être uniques

N'oubliez pas que si les valeurs du tableau d'origine ne sont pas uniques, array_flip () écrasera automatiquement la clé précédente:

 $arr = [
    'a' => 'apple',
    'b' => 'banana',
    'c' => 'apple',
];

print_r(array_flip($arr));

La sortie sera:

 Array
(
    [banana] => b
    [apple] => c // 'a' Couvert
)

Cela peut provoquer des bogues lorsqu'il s'agit de valeurs d'énumération, il est donc recommandé de s'assurer que les valeurs sont uniques avant l'inversion.

résumé

Array_flip () est une fonction petite mais très pratique, particulièrement adaptée aux conversions rapides entre "Valeurs" Label? À travers elle, nous pouvons rendre le code PHP plus concis, plus facile à lire et moins d'erreurs. La prochaine fois que vous rédigerez une boucle, vous pourriez aussi bien y penser: pouvez-vous utiliser array_flip () pour l'obtenir en une seule étape?