En PHP, lors des tableaux de tri, en particulier des tableaux associatifs (tableaux de paires de valeurs clés), nous rencontrons souvent des noms de clés en double ou le tri ne répond pas aux attentes. Krsort est une fonction en PHP pour le tri inversé par les noms de clés. Peut-il résoudre le problème de "la duplication clé conduit au tri"? Cet article analysera en détail et donnera des exemples de fonctionnement spécifiques.
Tout d'abord, il doit être clair que les noms clés des tableaux PHP sont uniques. Si vous utilisez un nom de clé en double lors de l'attribution de valeurs à un tableau, la valeur attribuée par la suite écrasera la précédente. Par exemple:
<?php
$arr = [
"key1" => "value1",
"key2" => "value2",
"key1" => "value3"
];
print_r($arr);
?>
Le résultat de la sortie est:
Array
(
[key1] => value3
[key2] => value2
)
On peut voir que lorsque Key1 est répété, Value1 est écrasé par Value3 , et en fait, seule la dernière affectation est conservée dans le tableau.
Par conséquent, il est impossible d'avoir des noms de clés en double dans les tableaux PHP , ce qui signifie que si vous pensez qu'il y a un problème avec les noms de clés en double, il est probable que vous ayez une mauvaise compréhension de la structure du tableau ou si vous utilisez un tableau multidimensionnel ou une sorte de structure imbriquée.
La fonction Krsort est utilisée pour inverser la tri (descendant) en fonction des noms de clés du tableau, en préservant la relation clé-valeur. La définition de la fonction est la suivante:
bool krsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
Exemple:
<?php
$arr = [
"b" => 2,
"a" => 1,
"c" => 3
];
krsort($arr);
print_r($arr);
?>
Résultat de sortie:
Array
(
[c] => 3
[b] => 2
[a] => 1
)
Notez que Krsort n'affecte pas le caractère unique des clés , il inverse simplement les clés existantes.
En raison de la caractéristique unique des noms de clés de tableau PHP, les soi-disant "problèmes de tri causés par la duplication clé" peuvent se référer à:
Les noms clés à différents niveaux dans les tableaux multidimensionnels sont répétés, mais uniques dans le même niveau.
Vous voulez trier par un champ, mais le nom de clé n'est pas unique, ou la structure de données est déraisonnable.
Si vous avez un tableau multidimensionnel comme celui qui suit:
<?php
$arr = [
["id" => 1, "name" => "Alice"],
["id" => 2, "name" => "Bob"],
["id" => 1, "name" => "Charlie"]
];
Il y a des doublons pour "ID" ici, mais c'est une valeur dans le tableau, pas un nom de clé. Vous voulez trier le champ "ID":
<?php
// selonidTrier dans l'ordre inverse
usort($arr, function($a, $b){
return $b['id'] <=> $a['id'];
});
print_r($arr);
?>
Cela n'a rien à voir avec Krsort , Krsort n'est trié que pour les noms clés.
Si vous avez vraiment besoin d'utiliser un champ comme clé pour éviter la duplication des noms de clés, vous pouvez d'abord filtrer ou épisser les noms de clés:
<?php
$arr = [
["id" => 1, "name" => "Alice"],
["id" => 2, "name" => "Bob"],
["id" => 1, "name" => "Charlie"]
];
// paridetnameCombinaison comme clé unique
$newArr = [];
foreach ($arr as $item) {
$key = $item['id'] . '_' . $item['name']; // Clé garanti unique
$newArr[$key] = $item;
}
// 对键Trier dans l'ordre inverse
krsort($newArr);
print_r($newArr);
?>
De cette façon, vous pouvez non seulement éviter la duplication des noms de clés, mais aussi les trier avec Krsort .
Les noms de clés du tableau PHP doivent être uniques et il n'y a pas de véritable "duplication de nom de clé".
KRSORT est utilisé pour inverser le tri par les noms de clés et ne résoudra pas le problème de la duplication des noms de clés.
Si vous avez des «clés répétées» dans vos données, c'est souvent un problème avec la structure des données et la structure du tableau doit être redessinée.
Pour le tri par un certain champ, des méthodes de tri personnalisées telles que USORT doivent être utilisées.
Si vous souhaitez trier par des noms de clés et assurez-vous que les noms de clés sont uniques, vous pouvez épisser les champs pour vous assurer qu'ils sont uniques, puis utiliser Krsort .
Si vous êtes intéressé par le tri des clés du tableau, recommandez le document PHP officiel: Krsort - Triez un tableau par clé dans l'ordre inverse