array_multisort 对多个数组或多维数组进行排序
发表日期:2021-07-01 08:57:07 | 来源: | | 浏览(517) 分类:数组 函数
array_multisort
(PHP 4, PHP 5, PHP 7, PHP 8)
array_multisort — 对多个数组或多维数组进行排序
说明
array
&$array1
,mixed
$array1_sort_order
= SORT_ASC,mixed
$array1_sort_flags
= SORT_REGULAR,mixed
$...
= ?): bool
array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。
关联(string)键名保持不变,但数字键名会被重新索引。
注意:
如果两个成员完全相同,那么它们在排序数组中的相对顺序是未定义的。
参数
-
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 之后。 提供的数组和之前的数组要有相同数量的元素。 换言之,排序是按字典顺序排列的。
返回值
成功时返回 true
, 或者在失败时返回 false
。
更新日志
版本 | 说明 |
---|---|
5.4.0 |
array1_sort_flags 增加 SORT_NATURAL 和 SORT_FLAG_CASE 选项。
|
5.3.0 |
array1_sort_flags 增加选项 SORT_LOCALE_STRING 。
|
范例
示例 #1 多个数组排序
<?php $ar1 = array(10, 100, 100, 0); $ar2 = array(1, 3, 2, 4); array_multisort($ar1, $ar2); var_dump($ar1); var_dump($ar2); ?>
这个例子里,排序后,第一个数组会包含 0、 10、 100、 100。 第二个数组会包含 4、1、 2、 3。 第二个数组里的项目对应第一个数组后也进行了排序(100 和 100)。
array(4) { [0]=> int(0) [1]=> int(10) [2]=> int(100) [3]=> int(100) } array(4) { [0]=> int(4) [1]=> int(1) [2]=> int(2) [3]=> int(3) }
示例 #2 排序多维数组
<?php $ar = array( array("10", 11, 100, 100, "a"), array( 1, 2, "2", 3, 1) ); array_multisort($ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC); var_dump($ar); ?>
本例中在排序后,第一个数组将变成 "10",100,100,11,"a"(被当作字符串以升序排列)。第二个数组将包含 1, 3, "2", 2, 1(被当作数字以降序排列)。
array(2) { [0]=> array(5) { [0]=> string(2) "10" [1]=> int(100) [2]=> int(100) [3]=> int(11) [4]=> string(1) "a" } [1]=> array(5) { [0]=> int(1) [1]=> int(3) [2]=> string(1) "2" [3]=> int(2) [4]=> int(1) } }
示例 #3 对数据库结果进行排序
本例中 data 数组中的每个单元表示一个表中的一行。这是典型的数据库记录的数据集合。
例子中的数据如下:
volume | edition -------+-------- 67 | 2 86 | 1 85 | 6 98 | 2 86 | 6 67 | 7
数据全都存放在名为 data 的数组中。这通常是通过循环从数据库取得的结果,例如 mysql_fetch_assoc()。
<?php $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); ?>
本例中将把 volume 降序排列,把 edition 升序排列。
现在有了包含有行的数组,但是 array_multisort() 需要一个包含列的数组,因此用以下代码来取得列,然后排序。
<?php // 取得列的列表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); ?>
数据集合现在排好序了,结果如下:
volume | edition -------+-------- 98 | 2 86 | 1 86 | 6 85 | 6 67 | 2 67 | 7
示例 #4 不区分大小写字母排序
SORT_STRING
和
SORT_REGULAR
都是区分大小写字母的,大写字母会排在小写字母之前。
要进行不区分大小写的排序,就要按照原数组的小写字母拷贝来排序。
<?php $array = array('Alpha', 'atomic', 'Beta', 'bank'); $array_lowercase = array_map('strtolower', $array); array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array); print_r($array); ?>
以上例程会输出:
Array ( [0] => Alpha [1] => atomic [2] => bank [3] => Beta )
- PHP(0)
- PHP杂项(34)
- PHP基础-李炎恢系列课程(20)
- 中文函数手册(0)
- 错误处理 函数(13)
- OPcache 函数(6)
- PHP 选项/信息 函数(54)
- Zip 函数(10)
- Hash 函数(15)
- OpenSSL 函数(63)
- Date/Time 函数(51)
- 目录函数(9)
- Fileinfo 函数(6)
- iconv 函数(11)
- 文件系统函数(81)
- 多字节字符串 函数(57)
- GD 和图像处理 函数(114)
- 可交换图像信息(5)
- Math 函数(50)
- 程序执行函数(11)
- PCNTL 函数(23)
- JSON 函数(4)
- SPL 函数(15)
- URL 函数(10)
- cURL 函数(32)
- 网络 函数(33)
- FTP 函数(36)
- Session 函数(23)
- PCRE 函数(11)
- PCRE 正则语法(19)
- 数组 函数(81)
- array_change_key_case 将数组中的所有键名修改为全大写或小写(0)
- array_chunk 将一个数组分割成多个(0)
- array_column 返回数组中指定的一列(0)
- array_combine 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值(0)
- array_count_values 统计数组中所有的值(0)
- array_diff_assoc 带索引检查计算数组的差集(0)
- array_diff_key 使用键名比较计算数组的差集(0)
- array_diff_uassoc 用用户提供的回调函数做索引检查来计算数组的差集(0)
- array_diff_ukey 用回调函数对键名比较计算数组的差集(0)
- array_diff 计算数组的差集(0)
- array_fill_keys 使用指定的键和值填充数组(0)
- array_fill 用给定的值填充数组(0)
- array_filter 使用回调函数过滤数组的元素(0)
- array_flip 交换数组中的键和值(0)
- array_intersect_assoc 带索引检查计算数组的交集(0)
- array_intersect_key 使用键名比较计算数组的交集(0)
- array_intersect_uassoc 带索引检查计算数组的交集,用回调函数比较索引(0)
- array_intersect_ukey 在键名上使用回调函数来比较计算数组的交集(0)
- array_intersect 计算数组的交集(0)
- array_key_exists 检查数组里是否有指定的键名或索引(0)
- array_key_first 获取指定数组的第一个键值(0)
- array_key_last 获取一个数组的最后一个键值(0)
- array_keys 返回数组中部分的或所有的键名(0)
- array_map 为数组的每个元素应用回调函数(0)
- array_merge_recursive 递归地合并一个或多个数组(0)
- array_merge 合并一个或多个数组(0)
- array_multisort 对多个数组或多维数组进行排序(0)
- array_pad 以指定长度将一个值填充进数组(0)
- array_pop 弹出数组最后一个单元(出栈)(0)
- array_product 计算数组中所有值的乘积(0)
- array_push 将一个或多个单元压入数组的末尾(入栈)(0)
- array_rand 从数组中随机取出一个或多个随机键(0)
- array_reduce 用回调函数迭代地将数组简化为单一的值(0)
- array_replace_recursive 使用传递的数组递归替换第一个数组的元素(0)
- array_replace 使用传递的数组替换第一个数组的元素(0)
- array_reverse 返回单元顺序相反的数组(0)
- array_search 在数组中搜索给定的值,如果成功则返回首个相应的键名(0)
- array_shift 将数组开头的单元移出数组(0)
- array_slice 从数组中取出一段(0)
- array_splice 去掉数组中的某一部分并用其它值取代(0)
- array_sum 对数组中所有值求和(0)
- array_udiff_assoc 带索引检查计算数组的差集,用回调函数比较数据(0)
- array_udiff_uassoc 带索引检查计算数组的差集,用回调函数比较数据和索引(0)
- array_udiff 用回调函数比较数据来计算数组的差集(0)
- array_uintersect_assoc 带索引检查计算数组的交集,用回调函数比较数据(0)
- array_uintersect_uassoc 带索引检查计算数组的交集,用单独的回调函数比较数据和索引(0)
- array_uintersect 计算数组的交集,用回调函数比较数据(0)
- array_unique 移除数组中重复的值(0)
- array_unshift 在数组开头插入一个或多个单元(0)
- array_values 返回数组中所有的值(0)
- array_walk_recursive 对数组中的每个成员递归地应用用户函数(0)
- array_walk 使用用户自定义函数对数组中的每个元素做回调处理(0)
- array 新建一个数组(0)
- arsort 对数组进行降向排序并保持索引关系(0)
- asort 对数组进行升序排序并保持索引关系(0)
- compact 建立一个数组,包括变量名和它们的值(0)
- count 计算数组中的单元数目,或对象中的属性个数(0)
- current 返回数组中的当前值(0)
- each 返回数组中当前的键/值对并将数组指针向前移动一步(0)
- end 将数组的内部指针指向最后一个单元(0)
- extract 从数组中将变量导入到当前的符号表(0)
- in_array 检查数组中是否存在某个值(0)
- key_exists 别名 array_key_exists()(0)
- key 从关联数组中取得键名(0)
- krsort 对数组按照键名逆向排序(0)
- ksort 对数组根据键名升序排序(0)
- list 把数组中的值赋给一组变量(0)
- natcasesort 用“自然排序”算法对数组进行不区分大小写字母的排序(0)
- natsort 用“自然排序”算法对数组排序(0)
- next 将数组中的内部指针向前移动一位(0)
- pos current() 的别名(0)
- prev 将数组的内部指针倒回一位(0)
- range 根据范围创建数组,包含指定的元素(0)
- reset 将数组的内部指针指向第一个单元(0)
- rsort 对数组降序排序(0)
- shuffle 打乱数组(0)
- sizeof count() 的别名(0)
- sort 对数组升序排序(0)
- uasort 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联(0)
- uksort 使用用户自定义的比较函数对数组中的键名进行排序(0)
- usort 使用用户自定义的比较函数对数组中的值进行排序(0)
- 类/对象 函数(18)
- 函数处理 函数(13)
- 变量处理 函数(37)
- SimpleXML 函数(3)
- 杂项 函数(31)
- 字符串 函数(101)