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] => 火星
)
ICP备案:
公安联网备案: