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 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
uksort($array, 'strcasecmp');
为了轻松实现以下效果:ksort($array,SORT_STRING | SORT_FLAG_CASE);
在PHP 5.3或更低版本中。array_reverse($arr)
来反转数组的顺序。如果你想保留数字键,则将 true
作为第二个参数传入(非数字键始终会被保留,因此在这个问题中可能并不必要)。 - M1kekrsort($array, SORT_NATURAL | SORT_FLAG_CASE);
可以这样重写:uksort($array, function ($a, $b) { return strcasecmp($b, $a); });
(支持 PHP 5.3)。 - Andronuksort($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
)