<?php
$array = [
"b" => 2,
"a" => 1,
"c" => 3,
];
krsort($array);
print_r($array);
?>
Nach dem Laufen das Ausgabeergebnis:
Array
(
[c] => 3
[b] => 2
[a] => 1
)
Hier werden die Schlüsselnamen von großes nach kleiner nach Buchstaben sortiert, was den Erwartungen entspricht.
Wenn Krsort () nach Schlüsselnamen sortiert, werden die Schlüsselnamen automatisch als Zeichenfolgen oder Ganzzahlen behandelt. Wenn die Schlüsselnamen des Arrays gemischt sind, ist das Sortierergebnis möglicherweise nicht wie erwartet.
Zum Beispiel:
<?php
$array = [
2 => 'two',
"10" => 'ten',
1 => 'one',
];
krsort($array);
print_r($array);
?>
Zu diesem Zeitpunkt ist der Schlüsselname 10 eine Zeichenfolge, aber tatsächlich ein numerischer Schlüssel, der in eine Ganzzahlverarbeitung umgewandelt wird, die dazu führen kann, dass die Sortierreihenfolge mit dem erwarteten nicht im Widerspruch steht.
Krsort () sortiert nur die ersten Schlüsselnamen des Arrays. Wenn es sich um ein mehrdimensionales Array handelt, wird das interne Subtarray nicht sortiert.
<?php
$array = [
"first" => ["b" => 2, "a" => 1],
"second" => ["d" => 4, "c" => 3],
];
krsort($array);
print_r($array);
?>
Hier sortieren wir nur die ersten und zweiten Tastennamen der ersten Stufe, und die internen Schlüsselnamen von B, A, D und C werden sich nicht ändern.
Krsort () unterstützt nur Array -Parameter. Wenn ein Nicht-Array (wie ein Objekt oder eine Zeichenfolge) übergeben wird, funktioniert die Funktion nicht und kann sogar einen Fehler melden.
Überprüfen Sie, ob die Variable ein Array ist
Verwenden Sie die Funktion is_array (), um zu überprüfen, um Missbrauch zu vermeiden.
if (!is_array($array)) {
echo "Die in übergebene Variable ist kein Array,Nicht sortieren";
}
Überprüfen Sie, ob der Schlüsselname -Typ konsistent ist
Überprüfen Sie, ob die Schlüsselnamen alle Zeichenfolgen oder Ganzzahlen sind, um das Mischen zu vermeiden und Sortierausnahmen zu verursachen.
foreach ($array as $key => $value) {
var_dump($key, gettype($key));
}
Bestätigen Sie, ob die erwartete Hierarchie sortiert ist
Für mehrdimensionale Arrays muss klargestellt werden, welche Ebene Sie sortieren müssen.
Die oben genannten Probleme werden mehrere Lösungen gegeben:
Wenn die Schlüsselnamen gemischt sind, ist der Schlüsselname -Typ zuerst einheitlich:
<?php
$newArray = [];
foreach ($array as $key => $value) {
$newArray[(string)$key] = $value;
}
krsort($newArray);
print_r($newArray);
?>
Dies vermeidet die Verwirrung numerischer Saiten.
Wenn Sie auch die Namen der Subtarray -Schlüsse sortieren müssen, verwenden Sie die rekursive Methode:
<?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 "Variablen sind keine Arrays,Nicht sortieren。";
}
?>
Ausführlichere Anweisungen und Beispiele zu PHP Krsort () können Sie auf die offizielle Dokumentation zugreifen:
<code> https://gitbox.net/manual/en/function.krsort.php </code>