Sto usando strnatcmp
nella mia funzione di confronto per ordinare i nomi delle persone in una tabella. Per il nostro cliente belga, otteniamo alcuni strani risultati. Hanno nomi come "Van der Broecke" e "Vander Veere", e strnatcasecmp("Van der", "Vander")
restituisce 0
!Perché gli spazi vengono ignorati in natsort/strnatcmp/strnatcasecmp?
Poiché il confronto naturale mira a ordinare come un essere umano, non capisco perché gli spazi siano completamente ignorati.
Esempio:
$names = array("Van de broecke", "Vander Veere", "Vande Muizen", "Vander Zoeker", "Van der Programma", "vande Huizen", "vande Kluizen", "vander Muizen", "Van der Luizen");
natcasesort($names);
print_r($names);
Dà:
Array (
[0] => Van de broecke
[5] => vande Huizen
[6] => vande Kluizen
[2] => Vande Muizen
[8] => Van der Luizen
[7] => vander Muizen
[4] => Van der Programma
[1] => Vander Veere
[3] => Vander Zoeker
)
Ma un essere umano direbbe:
Array (
[0] => Van de broecke
[4] => Van der Programma
[8] => Van der Luizen
[5] => vande Huizen
[6] => vande Kluizen
[2] => Vande Muizen
[7] => vander Muizen
[1] => Vander Veere
[3] => Vander Zoeker
)
La mia soluzione è ora quello di sostituire tutti gli spazi con sottolineature, che vengono gestiti correttamente . Due domande: Perché lo standard natsort
funziona in questo modo? Esiste una soluzione migliore?
Mi pare di capire, 'natsort' ordina le stringhe da numeri come gli esseri umani, esso doesn 'ordinare in modo corretto se non ci sono numeri – baldrs
@Baldrs No. PHP.net: "Questa funzione implementa un algoritmo di ordinamento che ordina le stringhe alfanumeriche nel modo in cui un essere umano vorrebbe mantenere le associazioni chiave/valore." – Spork
Una frase chiave è ** stringhe alfanumeriche **. – baldrs