PHP版本5.3或更低版本中的数组不区分大小写的键排序

时间:2012-08-29 14:30:37

标签: php arrays sorting

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);

2 个答案:

答案 0 :(得分:27)

对其中一个PHP函数引用页面的注释向我指出了uksort()函数;这个(和uasort()函数按值而不是键排序)允许比较算法转换快速排序由用户编写。

将此与非常简单的strcasecmp()函数(比较两个字符串并返回< 0表示> b和> 0表示> b)结合使用:

uksort($array, 'strcasecmp');

轻松达到以下效果:

ksort($array,SORT_STRING | SORT_FLAG_CASE);

在PHP 5.3或更低版本中。

答案 1 :(得分:1)

这就是我在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');