PHP二维数组排序 array_multisort
array_multisort — 对多个数组或多维数组进行排序
array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。
关联(string)键名保持不变,但数字键名会被重新索引
返回值
成功时返回 TRUE
, 或者在失败时返回 FALSE
参数
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
。
Example #1 多个数组排序
<?php $ar1 = array(10, 100, 100, 0); $ar2 = array(1, 3, 2, 4); array_multisort($ar1, $ar2); var_dump($ar1); var_dump($ar2); ?>
结果:
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) }
Example #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); ?>
结果:
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) } }
Example #3 对数据库结果进行排序
<?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); ?>
<?php
// 将数据根据 volume 降序排列,根据 edition 升序排列
// 把 $data 作为最后一个参数,以通用键排序
array_multisort(array_column($data,'volume'), SORT_DESC, array_column($data,'edition'), SORT_ASC, $data);
?>