PHP数组排序方法汇总(附带实例)
首先了解一下 PHP 里的 array_reverse() 函数,它会返回数组成员反向排列的新数组,函数定义如下:
下面的代码演示了 array_reverse() 函数的应用:
下表中给出了 PHP 数组排序函数及其应用规则的基本信息。
下面的代码演示了 sort() 函数的应用:
下面的代码演示了 rsort() 函数的应用:
下面的代码演示了这两个函数的应用:
natsort() 函数对数组成员的值按“自然排序”算法排序,其定义如下:
natcasesort() 函数功能与 natsort() 函数功能相似,但不区分字母的大小写。
下面的代码演示了这两个函数的应用:
例如:
下面的代码演示了这两个函数的应用:
下面的代码演示了 uksort() 函数的应用:
array_reverse(array $array[, bool $preserve_keys = false]) : array函数会将 $array 数组的成员反向排列,当成员的键为数字索引时,参数 $preserve_keys 决定是否保留原索引值,默认为 false,会给新数组成员重新分配索引值。
下面的代码演示了 array_reverse() 函数的应用:
<?php $arr = [1,2,3]; print_r(array_reverse($arr)); echo "<br>"; print_r(array_reverse($arr,true)); echo "<br>"; $arr1 = ["c"=>"ccc","b"=>"bbb","a"=>"aaa"]; print_r(array_reverse($arr1)); ?>代码执行结果为:
Array ( [0] => 3 [1] => 2 [2] => 1 ) Array ( [2] => 3 [1] => 2 [0] => 1 ) Array ( [a] => aaa [b] => bbb [c] => ccc )
下表中给出了 PHP 数组排序函数及其应用规则的基本信息。
函数 | 排序依据 | 保持索引键 | 排序方式 |
---|---|---|---|
sort() | 值 | 否 | 由低到高 |
rsort() | 值 | 否 | 由高到低 |
asort() | 值 | 是 | 由低到高 |
arsort() | 值 | 是 | 由高到低 |
usort() | 值 | 否 | 自定义 |
uasort() | 值 | 是 | 自定义 |
natsort() | 值 | 是 | 自然排序 |
natcasesort() | 值 | 是 | 自然排序,不区分字母大小写 |
shuffle() | 值 | 否 | 随机 |
ksort() | 键 | 是 | 由低到高 |
krsort() | 键 | 是 | 由高到低 |
uksort() | 键 | 是 | 自定义 |
PHP sort()函数
sort() 函数按数组成员的值升序排列,此函数会实际修改数组成员的顺序,并会修改成员的键为整数索引。sort() 函数的定义如下。sort(array &$array[, int $sort_flags = SORT_REGULAR]) : bool其中,参数 $array 为需要排序的数组;$sort_flags 为排序的方式,其值包括:
- SORT_REGULAR,正常排序,默认值;
- SORT_NUMERIC,按数值排序;
- SORT_STRING,按字符串形式排序;
- SORT_LOCALE_STRING,按设置的当前区域进行字符串比较。可以使用 setlocale() 函数设置当前区域;
- SORT_NATURAL,自然排序;
- SORT_FLAG_CASE,不区分字母的大小写,可以和 SORT_STRING 或 SORT_NATURAL 标识一起使用。两个标识一起使用时可以使用 | 或 or 运算符。
下面的代码演示了 sort() 函数的应用:
<?php $arr = ["earth","mars","jupiter"]; print_r($arr); echo "<br>"; sort($arr); print_r($arr); ?>代码执行结果为:
Array ( [0] => earth [1] => mars [2] => jupiter ) Array ( [0] => earth [1] => jupiter [2] => mars )
PHP rsort()函数
rsort() 函数对数组成员按值的降序排列,其参数定义与 sort() 函数相同。下面的代码演示了 rsort() 函数的应用:
<?php $arr = ["earth","mars","jupiter"]; print_r($arr); echo "<br>"; rsort($arr); print_r($arr); ?>运行结果为:
Array ( [0] => earth [1] => mars [2] => jupiter ) Array ( [0] => mars [1] => jupiter [2] => earth )
PHP asort()和arsort()函数
asort() 函数对数组成员按值升序排列,arsort() 函数对数组成员按值的降序排列,这两个函数会保留成员的键。下面的代码演示了这两个函数的应用:
<?php $arr = ["earth","mars","jupiter"]; print_r($arr); echo "<br>"; asort($arr); print_r($arr); echo "<br>"; arsort($arr); print_r($arr); ?>运行结果为:
Array ( [0] => earth [1] => mars [2] => jupiter ) Array ( [0] => earth [2] => jupiter [1] => mars ) Array ( [1] => mars [2] => jupiter [0] => earth )
PHP usort()函数
usort() 函数对数组成员按值排序,值的比较方式通过回调函数实现。排序结果会将成员的键重新设置为整数索引。函数格式定义如下:usort(array &$array, callable $value_compare_func) : bool回调函数的格式如下:
callback(mixed $a, mixed $b) : int下面的代码演示了 usort() 函数的应用:
<?php $arr = ["earth","Mars","jupiter"]; print_r($arr); echo "<br>"; sort($arr); print_r($arr); echo "<br>"; usort($arr,function($a,$b) { $x = strtolower($a); $y = strtolower($b); if($x < $y) return -1; if($x === $y) return 0; else return 1; }); print_r($arr); ?>代码执行结果为:
Array ( [0] => earth [1] => Mars [2] => jupiter ) Array ( [0] => Mars [1] => earth [2] => jupiter ) Array ( [0] => earth [1] => jupiter [2] => Mars )
PHP uasort()和natcasesort()函数
uasort() 函数对数组成员按值排序,值的比较方式通过回调函数实现。排序结果将保留成员原有的键。参数的定义与 usort() 函数相同。natsort() 函数对数组成员的值按“自然排序”算法排序,其定义如下:
natsort(array &$array) : bool实际上,这和使用了 SORT_NATURAL 标识的 sort() 函数功能相同。
natcasesort() 函数功能与 natsort() 函数功能相似,但不区分字母的大小写。
下面的代码演示了这两个函数的应用:
<?php $arr = ["earth","Mars","jupiter"]; print_r($arr); echo "<br>"; natsort($arr); print_r($arr); echo "<br>"; natcasesort($arr); print_r($arr); ?>代码执行结果为:
Array ( [0] => earth [1] => Mars [2] => jupiter ) Array ( [1] => Mars [0] => earth [2] => jupiter ) Array ( [0] => earth [2] => jupiter [1] => Mars )
PHP shuffle()函数
shuffle() 函数对数组成员随机排序,排序后的数组不保留原数组成员的键,而是使用新的整数索引。例如:
<?php $arr1 = array("mars"=>"火星","earth"=>"地球","jupiter"=>"木星"); shuffle($arr1); print_r($arr1); echo "<br>"; $arr2 = range(1,6); shuffle($arr2); print_r($arr2); ?>代码执行结果为(每次执行的结果都可能不同):
Array ( [0] => 地球 [1] => 木星 [2] => 火星 ) Array ( [0] => 1 [1] => 5 [2] => 6 [3] => 4 [4] => 2 [5] => 3 )
PHP ksort()和krsort()函数
ksort() 函数对数组成员按键的升序排列,函数定义如下:ksort(array &$array[, int $sort_flags = SORT_REGULAR]) : boolkrsort() 函数对数组成员按键的降序排列,参数定义与 ksort() 函数相同。
下面的代码演示了这两个函数的应用:
<?php $arr = ["earth"=>"地球","mars"=>"火星","jupiter"=>"木星"]; print_r($arr); echo "<br>"; ksort($arr); print_r($arr); echo "<br>"; krsort($arr); print_r($arr); ?>代码执行结果为:
Array ( [earth] => 地球 [mars] => 火星 [jupiter] => 木星 ) Array ( [earth] => 地球 [jupiter] => 木星 [mars] => 火星 ) Array ( [mars] => 火星 [jupiter] => 木星 [earth] => 地球 )
PHP uksort()函数
uksort() 函数对数组成员按键排列,排序规则由回调函数确定,函数的定义如下:uksort(array &$array, callable $key_compare_func) : bool回调函数定义格式如下:
callback(mixed $a, mixed $b) : int
下面的代码演示了 uksort() 函数的应用:
<?php $arr = ["earth"=>"地球 ","Mars"=>"火星 ","jupiter"=>"木星 "]; print_r($arr); echo "<br>"; ksort($arr); print_r($arr); echo "<br>"; uksort($arr,function($a,$b) { $x = strtolower($a); $y = strtolower($b); if($x<$y) return -1; if($x==$y) return 0; else return 1; }); print_r($arr); ?>代码执行结果为:
Array ( [earth] => 地球 [Mars] => 火星 [jupiter] => 木星 ) Array ( [Mars] => 火星 [earth] => 地球 [jupiter] => 木星 ) Array ( [earth] => 地球 [jupiter] => 木星 [Mars] => 火星 )