PHP中提供了很多排序方法:sort rsort asort arsort krsort ksort uasort uksort usort natcasesort natsort shuffle array_multisort。PHP官网文档做了很好的说明。这些数组排序函数功能差异体现在以下几个方面:排序后是否改变键值(函数名中有没有字母a)、按照key或value排序(函数命中有没有字母k)、升序或降序(函数名中有没有字母r)、是否为用户自定义(函数名中有没有字母u)。函数natcasesort、natsort、shuffle、array_multisort比较特殊。
shuffle函数实现随机排序。array_multisort是一个功能强大的函数,可以对多个数组实现排序。natsort和natcasesort分别实现自然排序和区分大小写的自然排序,自php5.4版本开始,asort函数完全可以实现这两个函数的功能。
结合一下这张图,便可一目了然:
这里有点让人迷惑的是PHP的几种排序参数:
SORT_REGULAR
SORT_NUMERIC
SORT_STRING
SORT_LOCALE_STRING
SORT_NATURAL
SORT_FLAG_CASE
SORT_NUMBER和SORT_STRING都是把值转化为对应的格式,然后再比较,SORT_NUMBER按值的大小来比较,SORT_STRING类型按照ascill值的大小挨个比较。这里容易让人产生疑惑的是SORT_REGULAR、SORT_NATTURAL、SORT_STRING三者的区别,SORT_REGULAR不进行类型转化,直接比较。比较的结果会按照类型分为几组,每组内的值会根据类型来选择相应的排序方法。SORT_NATTURAL与SORT_STRING类似,唯一的区别是,在遇到img2、img10、img20这种情况下,SORT_NATTURAL排序会更人性化,排序结果为:img2、img10、img20。而string不会考虑值里面的数字,排序结果为:img10、img2、img20。