I use strnatcmp in my comparison function to sort user names in a table. For our Belgian client, we get some strange results. They have names such as "Van der Brocke" and "Vander Weir," and strnatcasecmp("Van der", "Vander") returns 0 !
As a natural comparison is aimed at sorting as a person, I donβt understand why spaces are completely ignored.
eg:.
$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);
gives:
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 )
But a man would say:
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 )
My solution now is to replace all spaces with underscores, which are handled appropriately. Two questions: Why natsort work like this? Is there a better solution?
php natural-sort
Spork
source share