Position actuelle: Accueil> Derniers articles> Le tri de Krsort ne prend pas effet? Résoudre les FAQ

Le tri de Krsort ne prend pas effet? Résoudre les FAQ

gitbox 2025-05-27

1. Revue de l'utilisation de base de Krsort ()

 <?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.


2. Raisons courantes pour lesquelles Krsort () ne prend pas effet

1. Le type de nom de clé n'est pas uniforme

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.

2. Le tableau multidimensionnel ne spécifie pas le niveau de tri

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.

3. Type variable incorrect

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.


3. Comment dépanner le problème que Krsort () ne prend pas effet?

  1. 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&#39;est pas un tableau,Impossible de trier";
}
  1. 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));
}
  1. 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.


Iv. Exemples de solution

Plusieurs solutions sont données aux problèmes ci-dessus:

1. Forcer le nom de la clé en chaîne

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.

2. Trier récursivement les tableaux multidimensionnels

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);
?>

3. Confirmez la variable comme un tableau

 <?php
if (is_array($array)) {
    krsort($array);
} else {
    echo "Les variables ne sont pas des tableaux,Impossible de trier。";
}
?>

5. Lien de référence pratique

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>