PHP sort & usort & array_multisort 函数

区别:

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_STRINGSORT_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);

?> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值