Dans PHP, la fonction de la fonction array_flip () consiste à échanger des clés et des valeurs dans un tableau. Normalement, il s'applique aux tableaux où les valeurs sont uniques. La fonction array_flip () peut ne pas fonctionner comme prévu lorsque les valeurs du tableau sont dupliquées ou que les paramètres entrants ne sont pas un tableau. Dans cet article, nous discuterons de la façon de personnaliser la logique de traitement tolérante aux pannes de la fonction array_flip () afin que ces exceptions puissent être gérées gracieusement, telles que les valeurs de clés en double et les données non arrayantes.
L'utilisation de base de la fonction array_flip () consiste à échanger des clés et des valeurs dans un tableau. Par exemple:
$array = ['a' => 1, 'b' => 2, 'c' => 3];
$flippedArray = array_flip($array);
print_r($flippedArray);
La sortie sera:
Array
(
[1] => a
[2] => b
[3] => c
)
Comme indiqué ci-dessus, array_flip () convertit les touches dans le tableau en valeurs et valeurs en clés.
La fonction array_flip () gère les valeurs en double en prenant la dernière occurrence de la valeur clé. S'il y a plusieurs valeurs identiques dans le tableau, seule la dernière valeur clé sera conservée et les autres seront rejetées.
Par exemple:
$array = ['a' => 1, 'b' => 2, 'c' => 1];
$flippedArray = array_flip($array);
print_r($flippedArray);
La sortie sera:
Array
(
[2] => b
[1] => c
)
Dans cet exemple, les touches d'origine 'A' et 'C' sont toutes deux associées à la valeur 1 , mais parce que Array_flip () prend la dernière valeur de clé qui apparaît, seul 'C' est conservé dans le résultat final.
Pour mieux gérer cette situation, nous pouvons personnaliser une fonction pour enregistrer des valeurs de clés en double pour éviter de perdre des données.
Vous trouverez ci-dessous une fonction Array_flip () améliorée, nous nous assurons qu'aucune donnée n'est perdue en capturant des valeurs en double et en les stockant dans un tableau.
function custom_array_flip($array) {
if (!is_array($array)) {
throw new InvalidArgumentException('Le paramètre passé doit être un tableau');
}
$flipped = [];
$duplicates = [];
foreach ($array as $key => $value) {
if (isset($flipped[$value])) {
// Si la valeur existe déjà,Enregistrer les valeurs en double
$duplicates[] = $value;
} else {
$flipped[$value] = $key;
}
}
return ['flipped' => $flipped, 'duplicates' => $duplicates];
}
$array = ['a' => 1, 'b' => 2, 'c' => 1];
$result = custom_array_flip($array);
print_r($result);
Sortir:
Array
(
[flipped] => Array
(
[1] => a
[2] => b
)
[duplicates] => Array
(
[0] => 1
)
)
Dans cet exemple, nous enregistrons la valeur de clé en double (valeur de 1 ) dans le tableau en double au lieu de le rejeter directement.
array_flip () ne peut être appliqué qu'aux tableaux. Si le paramètre passé n'est pas un tableau, PHP lancera un avertissement. Pour éviter les exceptions du programme, nous pouvons ajouter une vérification du type de paramètre dans la fonction personnalisée et lancer une invite d'exception ou d'erreur appropriée.
Nous avons fait ce chèque dans l'exemple précédent:
if (!is_array($array)) {
throw new InvalidArgumentException('Le paramètre passé doit être un tableau');
}
De cette façon, si ce qui est passé n'est pas un tableau, nous allons attraper et lancer une exception invalidargumentException , invitant l'utilisateur pour une erreur dans le type de paramètre.
En personnalisant la fonction array_flip () , nous pouvons gérer efficacement les valeurs de clés en double et les données non réseau. Dans le développement réel, cette logique personnalisée peut améliorer la robustesse du code et empêcher le programme de s'écraser lorsqu'il est confronté à une entrée anormale. N'oubliez pas de traiter raisonnablement les valeurs en double dans les données et de fournir des informations d'erreur significatives afin que les utilisateurs puissent trouver et résoudre les problèmes plus facilement.