16

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

3 回答 3

34

对 PHP 函数参考页面之一的评论将我指向该uksort()函数;这(以及uasort()按值而不是键排序的功能)允许用户编写用于快速排序的比较算法。

将此与非常简单的strcasecmp()函数(比较两个字符串并返回 <0 表示 a>b 和 >0 表示 a>b)相结合,可以得到:

uksort($array, 'strcasecmp');

轻松达到以下效果:

ksort($array,SORT_STRING | SORT_FLAG_CASE);

在 PHP 5.3 或更低版本中。

于 2012-08-29T14:30:36.880 回答
2

这就是我在 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');
于 2017-09-01T14:17:05.410 回答
0

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
)
于 2021-09-22T14:31:34.183 回答