我在我的比較函數中使用strnatcmp
來排序表中的人名。對於我們的比利時客戶,我們得到了一些奇怪的結果。他們有'範德布勒克'和'範德維爾'的名字,並且strnatcasecmp("Van der", "Vander")
返回0
!由於自然比較的目的是將人類排序,所以我不明白爲什麼這些空間完全被忽視。爲什麼在natsort/strnatcmp/strnatcasecmp中忽略空格?
如:
$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);
給出:
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
)
但人會說:
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
)
我的解決辦法,現在是更換用下劃線的所有空間,這得到妥善處理。兩個問題: 爲什麼natsort
這樣工作? 有更好的解決方案嗎?
據我瞭解,'natsort'用數字爲人類做排序的字符串,它不如果沒有數字,則排序正確 – baldrs
@Baldrs No. PHP.net:「該函數實現了一種排序算法,該算法按照人類的方式對字母數字字符串進行排序,同時保持鍵/值關聯。」 – Spork
關鍵短語是**字母數字字符串**。 – baldrs