Die offizielle Definition von Krsort :
bool krsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
Funktion: Sortieren Sie das Array umgekehrt nach Schlüsselname, und der Schlüsselname wird erhalten.
Rückgabewert: Ob die Sortierung erfolgreich ist.
Hinweis: Die Schlüsselnamen bleiben gleich, aber die Reihenfolge der Elemente wird in umgekehrter Reihenfolge der Schlüsselnamen angeordnet.
Zum Beispiel:
$array = [
'b' => 2,
'a' => 1,
'c' => 3,
];
krsort($array);
print_r($array);
Ausgabe:
Array
(
[c] => 3
[b] => 2
[a] => 1
)
Wie Sie sehen können, ist das Array nach den Schlüsselnamen in umgekehrter Reihenfolge angeordnet.
In einigen Fällen möchten wir das Array teilweise sortieren oder die relative Reihenfolge bestimmter Elemente nach der Sortierung trotzdem behalten, aber Krsort wird immer global nach dem Schlüsselnamen sortiert, was dazu führt, dass die ursprüngliche Reihenfolge vollständig neu angeordnet wird.
Wenn der Schlüsselnamestyp nicht standardisiert ist (z. B. die Zahlenschlüssel mit Stringschlüssel gemischt werden), verhalten sich Krsort möglicherweise nicht wie erwartet. Ein weiterer Punkt ist, dass wenn Sie den gleichen Schlüsselnamen in Ihrem Array haben (dies ist in PHP selten, da der Schlüsselname eindeutig ist) oder wenn der Schlüsselname ähnlich, aber nicht genau die gleiche Zeichenfolge hat, hat er auch die Reihenfolge.
Wenn Sie die Reihenfolge der Elemente beim Sortieren teilweise bewahren müssen, können Sie zuerst die ursprüngliche Bestellung speichern und dann gemäß dieser Bestellung einstellen:
$array = [
'b' => 2,
'a' => 1,
'c' => 3,
];
// Speichern Sie die ursprüngliche Bestellung
$originalKeys = array_keys($array);
// Benehmen krsort Sortieren
krsort($array);
// Wenn Sie eine bestimmte Bestellung aufbewahren möchten,In original Reihenfolge neu ordnen
uksort($array, function($key1, $key2) use ($originalKeys) {
$pos1 = array_search($key1, $originalKeys);
$pos2 = array_search($key2, $originalKeys);
return $pos1 - $pos2;
});
print_r($array);
Im obigen Beispiel werden zuerst Krsort und dann mit UKSort die Schlüsselname -Reihenfolge in der ursprünglichen Reihenfolge neu einstellen, um die Anforderung einer teilweisen Sortierung zu erkennen.
Wenn Sie mit der Standard -Reverse -Sortierung von KRSORT nicht zufrieden sind, können Sie mit UKSort die Sortierregeln der Schlüsselnamen anpassen:
$array = [
'b' => 2,
'a' => 1,
'c' => 3,
];
// 按键名逆序Sortieren,Halten Sie eine assoziative Array -Struktur
uksort($array, function($k1, $k2) {
return strcmp($k2, $k1); // Reverse -Vergleichszeichenfolge
});
print_r($array);
Dies gibt Ihnen die vollständige Kontrolle über das Sortierverhalten.
Wenn die Geschäftslogik sehr hohe Anforderungen an "Reihenfolge" hat, wird empfohlen, Strukturen zu verwenden, die Reihenfolge und Schlüsselnamen wie Objekte oder zwei-Wege-verknüpfte Listen unterstützen, um den Auftragsverlust zu vermeiden, der durch die Bestellung des Arrays selbst verursacht wird.
<?php
// Beispielarray
$array = [
'b' => 2,
'a' => 1,
'c' => 3,
];
// planen1:krsort + uksortStellen Sie die ursprüngliche Bestellung wieder her
$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);
// planen2:uksort自定义键名逆序Sortieren
uksort($array, function($k1, $k2) {
return strcmp($k2, $k1);
});
print_r($array);
?>
KRSORT ist in umgekehrter Reihenfolge basierend auf Schlüsselnamen sortiert. Standardmäßig wird die Reihenfolge der Elemente geändert, die Schlüsselnamen werden jedoch beibehalten.
"Lost Order" liegt normalerweise daran, dass der Schlüsselname die ursprüngliche Bestellung abdeckt.
Die Lösung besteht darin, Hilfsvorgänge zu kombinieren, die die ursprüngliche Reihenfolge speichern, oder UKSSort verwenden, um benutzerdefinierte Sortierung zu implementieren.
Betrachten Sie in komplexen Szenarien andere Datenstrukturen, um sequentielle Probleme zu vermeiden.
Mit den oben genannten Methoden können Sie den assoziativen Array -Sortierungsprozess flexibler steuern, um einen zufälligen Verlust der ursprünglichen Bestellung zu vermeiden. Ich wünsche Ihnen eine reibungslose Codierung!