<?php
$array = [
"b" => 2,
"a" => 1,
"c" => 3,
];
krsort($array);
print_r($array);
?>
Après l'exécution, le résultat de la sortie:
Array
(
[c] => 3
[b] => 2
[a] => 1
)
Ici, les noms clés sont triés de grande à petite par lettre, qui répond aux attentes.
Lorsque KRSORT () trie par des noms clés, les noms de clés seront automatiquement traités comme des chaînes ou des entiers. Si les noms clés du tableau sont mitigés, le résultat de tri peut ne pas être comme prévu.
Par exemple:
<?php
$array = [
2 => 'two',
"10" => 'ten',
1 => 'one',
];
krsort($array);
print_r($array);
?>
À l'heure actuelle, le nom de clé 10 est une chaîne mais est en fait une clé numérique, qui sera convertie en un traitement entier, ce qui peut rendre l'incompatible de l'ordre de tri avec celui attendu.
krsort () trie uniquement les premiers noms de clé de couche du tableau. S'il s'agit d'un tableau multidimensionnel, le sous-réseau interne ne sera pas trié.
<?php
$array = [
"first" => ["b" => 2, "a" => 1],
"second" => ["d" => 4, "c" => 3],
];
krsort($array);
print_r($array);
?>
Ici, nous ne trierons que les noms de clés de premier niveau, en premier et deuxième , et les noms de clés internes de B, A, D et C ne changeront pas.
KRSORT () ne prend en charge que les paramètres du tableau. Si un non-réseau (comme un objet ou une chaîne) est passé, la fonction ne fonctionnera pas et peut même signaler une erreur.
Vérifiez si la variable est un tableau
Utilisez la fonction is_array () pour vérifier pour éviter une mauvaise utilisation.
if (!is_array($array)) {
echo "La variable passée n'est pas un tableau,Impossible de trier";
}
Vérifiez si le type de nom de clé est cohérent
Vérifiez si les noms de clés sont tous des chaînes ou des entiers pour éviter de mélanger et de provoquer des exceptions de tri.
foreach ($array as $key => $value) {
var_dump($key, gettype($key));
}
Confirmez si la hiérarchie attendue est triée
Pour les tableaux multidimensionnels, il est nécessaire de clarifier la couche que vous devez trier.
Plusieurs solutions sont données aux problèmes ci-dessus:
Si les noms de clés sont mitigés, le type de nom de clé est unifié en premier:
<?php
$newArray = [];
foreach ($array as $key => $value) {
$newArray[(string)$key] = $value;
}
krsort($newArray);
print_r($newArray);
?>
Cela évite la confusion des cordes numériques.
Si vous devez également trier les noms de clés de sous-réseau, utilisez la méthode récursive:
<?php
function recursive_krsort(&$array) {
if (!is_array($array)) return;
krsort($array);
foreach ($array as &$value) {
if (is_array($value)) {
recursive_krsort($value);
}
}
}
recursive_krsort($array);
print_r($array);
?>
<?php
if (is_array($array)) {
krsort($array);
} else {
echo "Les variables ne sont pas des tableaux,Impossible de trier。";
}
?>
Pour des instructions et des exemples plus détaillés sur PHP KRSORT () , vous pouvez accéder à la documentation officielle:
<code> https://gitbox.net/manual/en/function.krsort.php </code>