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!
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.
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".
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.
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.
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.
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?