Php 日语的sort()

Php 日语的sort(),php,unicode,localization,collation,cjk,Php,Unicode,Localization,Collation,Cjk,如果我已将当前语言环境设置为日语,如何使日语字符始终比非日语字符具有更高的优先级。例如,现在英文字符总是出现在片假名字符之前。我怎样才能扭转这种影响 对不起,我不太清楚。如你所见 最终的结果是Java、NVIDIA和Windowsファイアウォール. 排在前三位的是日本汉字。是否有可能将它们放在最后?最终,PHP的sort()将其留给底层libc来实现排序。正如文章和我的评论所示,并不是所有的libc都以相同的方式排序。如果需要提供一致的排序规则,则需要使用诸如使用第三方库之类的工具。使用而不是,

如果我已将当前语言环境设置为日语,如何使日语字符始终比非日语字符具有更高的优先级。例如,现在英文字符总是出现在片假名字符之前。我怎样才能扭转这种影响

对不起,我不太清楚。如你所见

最终的结果是Java、NVIDIA和Windowsファイアウォール.
排在前三位的是日本汉字。是否有可能将它们放在最后?

最终,PHP的
sort()
将其留给底层libc来实现排序。正如文章和我的评论所示,并不是所有的libc都以相同的方式排序。如果需要提供一致的排序规则,则需要使用诸如使用第三方库之类的工具。

使用而不是,以便您可以以自己的方式定义比较标准

试试这个简单的方法。我已经尝试了它的例子,从,它的工作

  function mccompare($a, $b) {
    $fca = ord(substr($a, 0, 1)); $fcb = ord(substr($b, 0, 1));
    if (($fca >= 127 && $fcb >= 127) || ($fca < 127 && $fcb < 127))
      $res = $a > $b ? 1 : -1; 
    else 
      $res = $a > $b ? -1 : 1;
    return $res;
    }

  usort ($your_array, "mccompare");
它像数组一样返回

Array
(
    [0] => インターネット オプション
    [1] => キーボード
    [2] => システム
    [3] => タスク
    [4] => フォント
    [5] => プログラムの追加と削除
    [6] => マウス
    [7] => メール
    [8] => 地域と言語オプション
    [9] => 日付と時刻
    [10] => 画面
    [11] => 管理ツール
    [12] => 自動更新
    [13] => 電源オプション
    [14] => 電話とモデムのオプション
    [15] => 音声認識
    [16] => Java
    [17] => NVIDIA
    [18] => Windows ファイウォール
)
注意:这只是我对这个问题的快速解决方案,并不是一个完美的解决方案。它基于在比较字符串时检查第一个字节,但您始终可以在这方面做一些努力,并改进此函数,以根据Unicode检查所有多字节字符,然后确定$a$b是否正确


希望它对你有用

没有看到。您确定安装了正确的区域设置吗<代码>$LC\u COLLATE=ja\u JP排序
Array
(
    [0] => インターネット オプション
    [1] => キーボード
    [2] => システム
    [3] => タスク
    [4] => フォント
    [5] => プログラムの追加と削除
    [6] => マウス
    [7] => メール
    [8] => 地域と言語オプション
    [9] => 日付と時刻
    [10] => 画面
    [11] => 管理ツール
    [12] => 自動更新
    [13] => 電源オプション
    [14] => 電話とモデムのオプション
    [15] => 音声認識
    [16] => Java
    [17] => NVIDIA
    [18] => Windows ファイウォール
)