PHP 5.4 引入了有用的 SORT_FLAG_CASE 以使任何其他搜索不区分大小写。不幸的是,这在 PHP 5.3 或更低版本中不可用,所以我想知道以下数组如何:
array('a'=>2,'b'=>4,'A'=>1,'B'=>3);
可以分类为:
array('A'=>1,'a'=>2,'B'=>3,'b'=>4);
正如通常的ksort()
功能将其排序为:
array('A'=>1,'B'=>3,'a'=>2,'b'=>4);
对 PHP 函数参考页面之一的评论将我指向该uksort()
函数;这(以及uasort()
按值而不是键排序的功能)允许用户编写用于快速排序的比较算法。
将此与非常简单的strcasecmp()
函数(比较两个字符串并返回 <0 表示 a>b 和 >0 表示 a>b)相结合,可以得到:
uksort($array, 'strcasecmp');
轻松达到以下效果:
ksort($array,SORT_STRING | SORT_FLAG_CASE);
在 PHP 5.3 或更低版本中。
这就是我在 PHP 7 中对 utf8 字符串数组进行排序(不区分大小写)的方式:
uksort($myarray, function ($a, $b) {
$a = mb_strtolower($a);
$b = mb_strtolower($b);
return strcmp($a, $b);
});
对于 PHP 5.3,您需要创建自己的排序函数:
function mySort1($a, $b) {
$a = mb_strtolower($a);
$b = mb_strtolower($b);
return strcmp($a, $b);
}
uksort($result['rows'], 'mySort1');
SORT_NATURAL
我建议,当数组键包含数字或为数字时,使用标志来防止不自然的排序:
ksort($elements, SORT_NATURAL | SORT_FLAG_CASE);
标准排序:
Array
(
img1.png => some_data_1
img10.png => some_data_10
img12.png => some_data_12
img2.png => some_data_2
)
自然顺序排序:
Array
(
img1.png => some_data_1
img2.png => some_data_2
img10.png => some_data_10
img12.png => some_data_12
)