Используйте usort () вместо sort () , чтобы вы могли определить критерии сравнения по-своему.
Попробуйте этот простой метод.Я попробовал это с примером из здесь , и он работает.
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");
Так что для этого примера
setlocale(LC_COLLATE, "jpn");
$your_array = array ("システム", "画面", "Windows ファイウォール",
"インターネット オプション", "キーボード", "メール", "音声認識", "管理ツール",
"自動更新", "日付と時刻", "タスク", "プログラムの追加と削除", "フォント",
"電源オプション", "マウス", "地域と言語オプション", "電話とモデムのオプション",
"Java", "NVIDIA");
usort ($your_array, "mccompare");
print_r($your_array);
он возвращает массив как
Array
(
[0] => インターネット オプション
[1] => キーボード
[2] => システム
[3] => タスク
[4] => フォント
[5] => プログラムの追加と削除
[6] => マウス
[7] => メール
[8] => 地域と言語オプション
[9] => 日付と時刻
[10] => 画面
[11] => 管理ツール
[12] => 自動更新
[13] => 電源オプション
[14] => 電話とモデムのオプション
[15] => 音声認識
[16] => Java
[17] => NVIDIA
[18] => Windows ファイウォール
)
Примечание: это только мое быстрое решение этой проблемы, и это не идеальное решение.Он основан на проверке первого байта при сравнении строк, но вы всегда можете приложить некоторые усилия и улучшить эту функцию, чтобы проверить все многобайтовые символы на соответствие Юникоду, а затем решить, является ли $ a <= $ b или $ a> $ b.
Надеюсь, у вас это получится!