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 位运算),不区分大小写排序字符串。
现在我们使用ksort($arr,SORT_NATURAL)对数组进行排序,得到结果如下:
Array ( [r1_] => 1 [r2_] => 2 [r10_] => 10 [r11_] => 11 )
另外还发现一个有趣的现象,使用ksort($arr,6)也可以得到同样的结果,具体原因未知。
