首页 > 编程笔记 > PHP笔记 阅读:10

PHP数组排序方法汇总(附带实例)

首先了解一下 PHP 里的 array_reverse() 函数,它会返回数组成员反向排列的新数组,函数定义如下:
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 数组排序函数及其应用规则的基本信息。

表: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() 函数的应用:
<?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]) : bool
krsort() 函数对数组成员按键的降序排列,参数定义与 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] => 火星
)

相关文章