使用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");
Run Code Online (Sandbox Code Playgroud)
所以对于这个例子
setlocale(LC_COLLATE, "jpn");
$your_array = array ("????", "??", "Windows ???????",
"??????? ?????", "?????", "???", "????", "?????",
"????", "?????", "???", "???????????", "????",
"???????", "???", "??????????", "????????????",
"Java", "NVIDIA");
usort ($your_array, "mccompare");
print_r($your_array);
Run Code Online (Sandbox Code Playgroud)
它返回数组
Array
(
[0] => ??????? ?????
[1] => ?????
[2] => ????
[3] => ???
[4] => ????
[5] => ???????????
[6] => ???
[7] => ???
[8] => ??????????
[9] => ?????
[10] => ??
[11] => ?????
[12] => ????
[13] => ???????
[14] => ????????????
[15] => ????
[16] => Java
[17] => NVIDIA
[18] => Windows ???????
)
Run Code Online (Sandbox Code Playgroud)
注意:这只是我对这个问题的快速解决方案,并不是一个完美的解决方案.它基于检查比较字符串中的第一个字节,但您总是可以在其中进行一些努力并改进此功能以检查所有多字节字符与Unicode,然后确定$ a <= $ b或$ a> $ b.
希望这对你有用!
| 归档时间: |
|
| 查看次数: |
1359 次 |
| 最近记录: |