strnatcmp
テーブル内の人名を並べ替えるために、比較関数で使用しています。ベルギーのクライアントの場合、奇妙な結果が得られます。彼らは「ヴァン デル ブロッケ」や「ヴァンダー ヴィーレ」などの名前を持ち、strnatcasecmp("Van der", "Vander")
戻ってきます0
。
自然な比較は人間が行うようにソートすることを目的としているため、スペースが完全に無視される理由がわかりません。
例えば:
$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
)
私の解決策は、適切に処理されるすべてのスペースをアンダースコアに置き換えることです。2 つの質問: なぜnatsort
このように機能するのですか? より良い解決策はありますか?