Dans la programmation PHP, Array_flip () est une fonction couramment utilisée qui peut coupler les clés et les valeurs d'un tableau. Cependant, de nombreux développeurs peuvent rencontrer le problème de la «perte de données» pendant l'utilisation, en particulier lorsqu'il y a des valeurs en double dans le tableau. Alors, que se passe-t-il? Cet article expliquera en détail le comportement de Array_flip () pour vous aider à comprendre les principes derrière.
Array_flip () est une fonction de tableau intégrée en PHP, utilisé pour échanger des clés et des valeurs dans un tableau. La syntaxe de base est la suivante:
array_flip(array $array): array
Sa fonction est de comparer chaque clé et valeur dans le tableau d'entrée, la valeur d'origine devient la nouvelle clé et la touche d'origine devient la nouvelle valeur.
$input = [
'a' => 'apple',
'b' => 'banana',
'c' => 'cherry'
];
$result = array_flip($input);
print_r($result);
La sortie est:
Array
(
[apple] => a
[banana] => b
[cherry] => c
)
On peut voir que les clés et les valeurs ont été réciproques avec succès sans aucun problème.
Qu'arrive-t-il à array_flip () lorsqu'il y a des valeurs en double dans le tableau d'origine?
Jetons un coup d'œil à un exemple:
$input = [
'a' => 'apple',
'b' => 'banana',
'c' => 'apple'
];
$result = array_flip($input);
print_r($result);
Sortir:
Array
(
[banana] => b
[apple] => c
)
Il y a un détail important ici: il s'avère que Apple est les valeurs de A et C , mais à la fin, il ne conserve que la paire de C => Apple . Cela signifie A => Apple est jeté.
En PHP, les clés du tableau sont uniques. Lorsque Array_flip () transforme la valeur en une clé, si plusieurs valeurs sont les mêmes, un "conflit clé" se produira. PHP écrasera la valeur précédente avec la valeur suivante , ce qui entraînera une perte de données.
Poursuivant avec l'exemple tout à l'heure, le processus d'exécution de Array_flip () est le suivant:
A => Apple → Apple => A
b => banane → banane => b
C => Apple → Apple => C ( écraser Apple précédent => a )
Ainsi, seul Apple => C est conservé dans le résultat final, et l' Apple d'origine => a est écrasé.
Si vous avez besoin de "échange de valeurs clés" le tableau mais que vous ne pouvez pas accepter la perte de données, vous pouvez considérer les solutions suivantes:
Utilisez la valeur comme clé du tableau, et la valeur devient un tableau, conservant toutes les clés d'origine.
$input = [
'a' => 'apple',
'b' => 'banana',
'c' => 'apple'
];
$result = [];
foreach ($input as $key => $value) {
if (!isset($result[$value])) {
$result[$value] = [];
}
$result[$value][] = $key;
}
print_r($result);
Sortir:
Array
(
[apple] => Array
(
[0] => a
[1] => c
)
[banana] => Array
(
[0] => b
)
)
Cela évite non seulement la perte de données, mais vous permet également de voir clairement quelles clés correspondent à la même valeur.
Par exemple, lors du traitement d'une table de configuration, mappez le champ de la base de données sur le champ frontal:
$mapping = [
'username' => 'user',
'email' => 'user',
'address' => 'location'
];
$flipped = array_flip($mapping);
print_r($flipped);
Sortir:
Array
(
[user] => email
[location] => address
)
Vous avez peut-être espéré que les deux utilisateurs => nom d'utilisateur et utilisateur => e-mail sont réservés, mais en fait seul l'utilisateur => e-mail est laissé et les autres sont couverts. Dans ce cas, il est recommandé d'utiliser la pratique de la "valeur susmentionnée" pour éviter les erreurs logiques.
array_flip () appariera les clés et les valeurs;
S'il y a des valeurs en double dans le tableau d'origine, un "conflit clé" se produira;
Les clés de tableau en PHP doivent être uniques, donc ce dernier écrasera la précédente, entraînant une perte de données;
La valeur peut être convertie en une clé manuellement et la clé d'origine est enregistrée dans un tableau pour préserver toutes les informations.