php函数sort,rsort,ksort,krsort,asort,arsort区别详解

PHP笔记 2019年03月02日

sort,rsort,ksort,krsort,asort,arsort函数用来对数组进行排序,本篇笔记对这6个函数的功能区别,传入参数和返回值进行了介绍,并通过范例加深了解他们之间的区别

函数功能

函数功能
sort按数组的值进行升序排序
rsort按数组的值进行降序排序
ksort按数组的键进行升序排序,并保留键值关系
krsort按数组的键进行降序排序,并保留键值关系
asort按数组的值进行升序排序,并保留键值关系
arsort按数组的值进行降序排序,并保留键值关系

参数介绍

函数名 ( array &$array [, int $sort_flags = SORT_REGULAR ] ) : bool
以上6个函数的传入参数和返回值相同
传入参数
&$array - 必须传入要排序的数组的引用
$sort_flags - 可选传入改变排序的行为
$sort_flags可选值如下
SORT_REGULAR - 正常比较单元(不改变类型)
SORT_NUMERIC - 单元被作为数字来比较
SORT_STRING - 单元被作为字符串来比较
SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变
SORT_NATURAL - 对每个单元以“自然的顺序”对字符串进行排序
SORT_FLAG_CASE - 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串
返回值
成功时返回 TRUE, 失败时返回 FALSE

范例

声明一个数组

$array = [1 => 'construct', 'c' => 'behavior', 3 => 'abstract', 'a' => 'jmsite'];

sort和rsort对比

$arr = $array;
sort($arr);
print_r($arr);

$arr = $array;
rsort($arr);
print_r($arr);

输出

Array
(
    [0] => abstract
    [1] => behavior
    [2] => construct
    [3] => jmsite
)
Array
(
    [0] => jmsite
    [1] => construct
    [2] => behavior
    [3] => abstract
)

以上php代码执行后,数组按照值进行了升序和降序的排序,但键值关系没有保留
ksort和krsort对比

$arr = $array;
ksort($arr);
print_r($arr);

$arr = $array;
krsort($arr);
print_r($arr);

输出

Array
(
    [a] => jmsite
    [c] => behavior
    [1] => construct
    [3] => abstract
)
Array
(
    [3] => abstract
    [1] => construct
    [c] => behavior
    [a] => jmsite
)

以上php代码执行后,数组按照键进行了升序和降序的排序,键值关系保留
asort和arsort对比

$arr = $array;
asort($arr);
print_r($arr);

$arr = $array;
arsort($arr);
print_r($arr);

输出

Array
(
    [3] => abstract
    [c] => behavior
    [1] => construct
    [a] => jmsite
)
Array
(
    [a] => jmsite
    [1] => construct
    [c] => behavior
    [3] => abstract
)

以上php代码执行后,数组按照值进行了升序和降序的排序,键值关系保留