Dans PHP, Array_flip () est une fonction très pratique, et sa fonction est. En d'autres termes, la valeur du tableau d'origine deviendra une nouvelle clé, et la clé d'origine deviendra la valeur correspondante.
Mais vous pouvez constater qu'après avoir utilisé array_flip () , la longueur du tableau devient plus petite . Pourquoi est-ce? Est-ce parce qu'il y a une duplication dans la valeur d'origine? La réponse est: oui, c'est précisément parce que la valeur est répétée!
$original = [
'a' => 'apple',
'b' => 'banana',
'c' => 'apple',
];
$flipped = array_flip($original);
print_r($flipped);
Array
(
[banana] => b
[apple] => c
)
Comme vous pouvez le voir, le tableau d'origine $ avait à l'origine trois éléments, mais le tableau bas vers deux n'en avait que deux. Pourquoi 'Apple' => C écrase-t-il "Apple '=> A ?
array_flip () nécessite que la valeur du tableau doit être d'un type qui peut être utilisé comme clé , c'est-à-dire une chaîne ou un entier. Lorsque vous retournez, s'il y a deux clés correspondant à la même valeur, ce dernier remplace le premier .
Dans l'exemple ci-dessus:
'a' => 'Apple' → 'Apple' => A
'C' => 'Apple' → 'Apple' => C (remplace l'original 'Apple' => a )
Par conséquent, seule «Apple» => C est conservée dans le réseau inversé, ce qui entraîne une diminution de la longueur du tableau.
Si vous avez besoin de préserver toutes les relations de cartographie, vous pouvez envisager de cartographier les valeurs en tableaux et les gérer manuellement:
$original = [
'a' => 'apple',
'b' => 'banana',
'c' => 'apple',
];
$flipped = [];
foreach ($original as $key => $value) {
if (!isset($flipped[$value])) {
$flipped[$value] = [];
}
$flipped[$value][] = $key;
}
print_r($flipped);
Array
(
[apple] => Array
(
[0] => a
[1] => c
)
[banana] => Array
(
[0] => b
)
)
De cette façon, vous pouvez conserver toutes les informations clés et éviter le problème d'être écrasé.
Supposons que vous effectuez un service de liaison court-courte URL (comme https://m66.net/abc123 ), vous pouvez avoir un ensemble de liens originaux et leurs codes courts:
$links = [
'abc123' => 'https://m66.net/page1',
'def456' => 'https://m66.net/page2',
'ghi789' => 'https://m66.net/page1',
];
$reverse = array_flip($links);
print_r($reverse);
En conséquence, https://m66.net/page1 ne conservera la cartographie qu'une seule fois (probablement «ghi789» ), et le précédent «ABC123» est écrasé. Cela aura un impact sur votre logique de contre-vérifier à courte chaîne.
Ainsi, dans les applications pratiques, si vous souhaitez vérifier en réversement les liens courts, vous devez déterminer s'il existe des valeurs en double et choisir la structure de données appropriée.
array_flip () interviendra les clés et les valeurs du tableau.
S'il y a des valeurs en double dans le tableau d'origine, seul le dernier sera conservé après le retournement et le précédent sera écrasé.
Cette situation entraînera une petite taille .
Si vous devez conserver toutes les relations de cartographie, vous pouvez construire manuellement le tableau, avec les valeurs correspondant au tableau.
Comprendre cette fonctionnalité vous aidera à éviter la perte de données lors de la rédaction de programmes PHP. J'espère que cet article peut vous aider à comprendre le comportement de Array_flip () plus clairement!