La définition officielle de Krsort :
bool krsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
Fonction: Triez en réversement le tableau par nom de clé et le nom de clé est conservé.
Valeur de retour: si le tri est réussi.
Remarque: Les noms de clés restent les mêmes, mais l'ordre des éléments sera organisé dans l'ordre inverse des noms de clés.
Par exemple:
$array = [
'b' => 2,
'a' => 1,
'c' => 3,
];
krsort($array);
print_r($array);
Sortir:
Array
(
[c] => 3
[b] => 2
[a] => 1
)
Comme vous pouvez le voir, le tableau est organisé dans l'ordre inverse en fonction des noms de clés.
Dans certains cas, nous voulons trier partiellement le tableau, tout en conservant l'ordre relatif de certains éléments après le tri, mais Krsort est toujours trié à l'échelle mondiale en fonction du nom de la clé, ce qui entraînera un réarrangement complètement réarrangé de l'ordre d'origine.
De plus, si le type de nom de clé n'est pas standardisé (comme les touches numériques sont mélangées avec des touches de chaîne), Krsort peut ne pas se comporter comme prévu. Un autre point est que si vous avez le même nom de clé dans votre tableau (c'est rare en PHP car le nom de la clé est unique), ou si le nom de clé a des chaînes similaires mais pas exactement la même chaîne, cela affectera également l'ordre.
Si vous devez préserver partiellement l'ordre des éléments lors du tri, vous pouvez d'abord enregistrer l'ordre d'origine, puis l'ajuster en fonction de cette commande:
$array = [
'b' => 2,
'a' => 1,
'c' => 3,
];
// Enregistrer la commande d'origine
$originalKeys = array_keys($array);
// conduire krsort Trier
krsort($array);
// Si vous souhaitez conserver une commande spécifique,Réorganiser dans l'ordre d'origine
uksort($array, function($key1, $key2) use ($originalKeys) {
$pos1 = array_search($key1, $originalKeys);
$pos2 = array_search($key2, $originalKeys);
return $pos1 - $pos2;
});
print_r($array);
Dans l'exemple ci-dessus, d'abord Krsort , puis utilisez Uksort pour réajuster l'ordre du nom de clé dans l'ordre d'origine pour réaliser l'exigence de tri partiel.
Si vous n'êtes pas satisfait du tri inversé par défaut de Krsort , vous pouvez utiliser Uksort pour personnaliser les règles de tri du nom de clé:
$array = [
'b' => 2,
'a' => 1,
'c' => 3,
];
// 按键名逆序Trier,Garder la structure de tableau associative
uksort($array, function($k1, $k2) {
return strcmp($k2, $k1); // Chaîne de comparaison inversée
});
print_r($array);
Cela vous donne un contrôle complet sur le comportement de tri.
Si la logique métier a des exigences très élevées pour «commande», il est recommandé d'utiliser des structures qui prennent en charge l'ordre et les noms de clés, tels que des objets ou des listes liées à double sens, pour éviter la perte de commande causée par l'ordre du tableau lui-même.
<?php
// Exemple de tableau
$array = [
'b' => 2,
'a' => 1,
'c' => 3,
];
// plan1:krsort + uksortRestaurer la commande d'origine
$originalKeys = array_keys($array);
krsort($array);
uksort($array, function($key1, $key2) use ($originalKeys) {
$pos1 = array_search($key1, $originalKeys);
$pos2 = array_search($key2, $originalKeys);
return $pos1 - $pos2;
});
print_r($array);
// plan2:uksort自定义键名逆序Trier
uksort($array, function($k1, $k2) {
return strcmp($k2, $k1);
});
print_r($array);
?>
Krsort est trié dans l'ordre inverse en fonction des noms de clés. Par défaut, l'ordre des éléments sera modifié, mais les noms de clés sont conservés.
"Ordre perdu" est généralement dû au fait que le type de nom de clé couvre l'ordre d'origine.
La solution consiste à combiner les opérations auxiliaires qui enregistrent la commande d'origine ou utilisent Uksort pour implémenter le tri personnalisé.
Dans des scénarios complexes, considérez d'autres structures de données pour éviter les problèmes séquentiels.
Grâce aux méthodes ci-dessus, vous pouvez contrôler plus de manière flexible le processus de tri de tableau associatif pour éviter la perte accidentelle de l'ordre d'origine. Je vous souhaite un codage fluide!