区别:
1. sort 用于一维数组排序;
2. usort 用于二维数组;
3. array_multisort 用于多维数组;
具体用法如下:
一、sort 从低到高排序
sort ( array &$array
[, int $sort_flags
= SORT_REGULAR ] ) : bool
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
参数
$array
要排序的数组。
$sort_flags
可选的第二个参数 sort_flags
可以用以下值改变排序的行为:
排序类型标记:
SORT_REGULAR
- 正常比较单元(不改变类型)SORT_NUMERIC
- 单元被作为数字来比较SORT_STRING
- 单元被作为字符串来比较SORT_LOCALE_STRING
- 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。SORT_NATURAL
- 和 natsort() 类似对每个单元以"自然的顺序"对字符串进行排序。 PHP 5.4.0 中新增的。SORT_FLAG_CASE
- 能够与SORT_STRING
或SORT_NATURAL
合并(OR 位运算),不区分大小写排序字符串。
sort($fruits, SORT_NATURAL|SORT_FLAG_CASE);
这种用法说明排序类型标记,是可以累加使用的。
正向排序用sort,逆向排序用rsort。
Note:此函数为 $
array
中的元素赋与新的键名,这将删除原有的键名。Warning:在对含有混合类型值的数组排序时要小心,因为 sort() 可能会产生不可预知的结果。
二、usort 自定义数组排序
usort ( array &$array
, callable $value_compare_func
) : bool
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
本函数将用用户自定义的比较函数对一个数组中的值进行排序。 如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。
Note:
If two members compare as equal, their relative order in the sorted array is undefined.
此函数为 $
array
中的元素赋与新的键名,这将删除原有的键名。
参数
$array
输入的数组
$cmp_function
在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。
callback ( mixed $a
, mixed $b
) : int
Caution:Returning non-integer values from the comparison function, such as float, will result in an internal cast to integer of the callback's return value. So values such as 0.99 and 0.1 will both be cast to an integer value of 0, which will compare such values as equal.
三、array_multisort 多个或多维数组排序
array_multisort ( array &$array1
[, mixed $array1_sort_order
= SORT_ASC [, mixed $array1_sort_flags
= SORT_REGULAR [, mixed $...
]]] ) : bool
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维,对多维数组进行排序。
关联(string)键名保持不变,但数字键名会被重新索引。
Note: If two members compare as equal, their relative order in the sorted array is undefined.
参数
$array1
要排序的 array。
$array1_sort_order
之前 array 参数要排列的顺序。 SORT_ASC
按照上升顺序排序, SORT_DESC
按照下降顺序排序。此参数可以和 $array1_sort_flags
互换,也可以完全删除,默认是 SORT_ASC
。
array1_sort_flags
为 array 参数设定选项:
排序类型标志:
SORT_REGULAR
- 将项目按照通常方法比较(不修改类型)SORT_NUMERIC
- 按照数字大小比较SORT_STRING
- 按照字符串比较SORT_LOCALE_STRING
- 根据当前的本地化设置,按照字符串比较。 它会使用 locale 信息,可以通过 setlocale() 修改此信息。SORT_NATURAL
- 以字符串的"自然排序",类似 natsort()SORT_FLAG_CASE
- 可以组合 (按位或 OR)SORT_STRING
或者SORT_NATURAL
大小写不敏感的方式排序字符串。
参数可以和 array1_sort_order
交换或者省略,默认情况下是 SORT_REGULAR
。
...
可选的选项,可提供更多数组,跟随在 sort order 和 sort flag 之后。 提供的数组和之前的数组要有相同数量的元素。 换言之,排序是按字典顺序排列的。
1、一次对多个一维数组进行排序
<?php
$arr = array(
array("10", 11, 100, 100, "a"),
array( 1, 2, "2", 3, 1)
);
array_multisort($arr[0], SORT_ASC, SORT_STRING,
$arr[1], SORT_NUMERIC, SORT_DESC);
var_dump($arr);
?>
2、根据某一维或多维,对多维数组排序
<?php
/* 本例中将把 volume 降序排列,把 edition 升序排列。*/
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
// 取得列的列表
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
// 将数据根据 volume 降序排列,根据 edition 升序排列
// 把 $data 作为最后一个参数,以通用键排序
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>