Sivo 悉见

PHP ksort 字母数字混合键值排序出现错误的解决方法

匿名 · 更新于 2017/11/4

例如现在有如下数组$arr:
Array ( [r11_] => 11 [r2_] => 2 [r10_] => 10 [r1_] => 1 )
现在使用ksort(ksort($arr))对其进行排序,结果如下
Array ( [r10_] => 10 [r11_] => 11 [r1_] => 1 [r2_] => 2 )
很明显,这不是我们要的结果,经过对ksort函数的深入研究,发现该函数还有第二个参数,改参数为可选,
具体如下:

  • SORT_REGULAR - 正常比较单元(不改变类型)
  • SORT_NUMERIC - 单元被作为数字来比较
  • SORT_STRING - 单元被作为字符串来比较
  • SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。
  • SORT_NATURAL - 和 natsort() 类似对每个单元以“自然的顺序”对字符串进行排序。 PHP 5.4.0 中新增的。
  • SORT_FLAG_CASE - 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。
在这里,我们使用SORT_NATURAL参数,就可以解决该问题。
现在我们使用ksort($arr,
SORT_NATURAL)对数组进行排序,得到结果如下:
Array ( [r1_] => 1 [r2_] => 2 [r10_] => 10 [r11_] => 11 ) 
另外还发现一个有趣的现象,使用ksort($arr,
6)也可以得到同样的结果,具体原因未知。