Ich habe eine PHP-Array haben eine Liste der Länder enthalten:Der Versuch, ein mehrdimensionales Array zu sortieren, von einem Unterwert mit Sonderzeichen
$countries = array(
'AX' => 'Åland Islands',
'AF' => 'Afghanistan',
'GB' => 'United Kingdom'
);
$collator = collator_create('en');
collator_asort($collator, $countries, Collator::SORT_STRING);
Offensichtlich ist diese Liste viel kürzer für dieses Beispiel ist, aber das Sortieren funktionierte hier. Ich erwartete, und bekam:
- Afghanistan
- Åland-Inseln
- Vereinigtes Königreich
aber ich brauchte mehr Daten hinzuzufügen, und es wurde mehrdimensional:
$countries = array(
array(
'name' => 'Åland Islands',
'code' => 'AX'
),
array(
'name' => 'Afghanistan',
'code' => 'AF'
),
array(
'name' => 'United Kingdom',
'code' => 'GB'
)
);
usort($countries, function($a, $b){ return $a['name'] <=> $b['name']; });
Es sortiert jedes andere Land in der Liste, aber gibt mir das:
- Afghanistan
- Vereinigtes Königreich
- Åland-Inseln
Ich kann nicht für das Leben von mir herauszufinden, wie diese richtig zu sortieren. Ich stelle fest, dass im aktuellen Zustand kein Collator aufgerufen oder angewendet wird, aber gibt es eine Möglichkeit, den Collator in einer mehrdimensionalen Umgebung arbeiten zu lassen?
Das funktioniert gut, und behält die Collator, die ich wollte, zu tun. Ich habe einige schnelle Leistungstests durchgeführt und es scheint das Skript überhaupt nicht zu verlangsamen. Vielen Dank! –
Froh, dass es Ihren Bedürfnissen entspricht. Beachten Sie, dass die Schlüssel von $ arr nicht beibehalten werden müssen. So können Sie 'kollator_asort()' durch 'kollator_sort()' und 'array_pop ($ arr) == $ a ['name'];' mit '$ arr [1] == $ a ['name'] ersetzen ; 'Es sollte etwas schneller sein. – Arnauld