二维数组根据某个字段排序有两种办法,一种是通过sort自己写代码,一种是直接用array_multisort排序函数
一. 手写arraysort
PHP的一维数组排序函数:
sort 对数组的值按照升序排列(rsort降序),不保留原始的键
ksort 对数组的键按照升序排列(krsort降序) 保留键值关系
asort 对数组的值按照升序排列(arsort降序),保留键值关系
方法: 取出要排序的值组成值数组(为一维数组),按要求对值进行排序(保持键值关系),遍历值数组,按照键对应赋值给结果数组。
function arraySort($array,$keys,$sort='asc') {
$newArr = $valArr = array();
foreach ($array as $key=>$value) {
$valArr[$key] = $value[$keys];
}
($sort == 'asc') ? asort($valArr) : arsort($valArr);
reset($valArr);
foreach($valArr as $key=>$value) {
$newArr[$key] = $array[$key];
}
return $newArr;
}
二. 通过array_multisort 进行数组字段排序
这里也是本篇主要要说的。
官网对array_multisort函数的解释: 对多个数组或多维数组进行排序
bool array_multisort ( array $ar1 [, mixed $arg [, mixed $… [, array $… ]]] )
成功时返回 TRUE, 或者在失败时返回 FALSE.
array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。关联(string)键名保持不变,但数字键名会被重新索引。
输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。
本函数的参数结构有些不同寻常,但是非常灵活。第一个参数必须是一个数组。接下来的每个参数可以是数组或者是下面列出的排序标志。
排序顺序标志:
- SORT_ASC - 按照上升顺序排序
- SORT_DESC - 按照下降顺序排序
排序类型标志:
- SORT_REGULAR - 将项目按照通常方法比较
- SORT_NUMERIC - 将项目按照数值比较
- SORT_STRING - 将项目按照字符串比较
每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 - 在此之前为默认值 SORT_ASC 和 SORT_REGULAR。
例1
$ar1 = array("10", 101, 100, 6);
$ar2 = array(1, 3, 6, 5);
array_multisort($ar1, $ar2);
print_r($ar1);
print_r($ar2);
第二个数组中的项目顺序完全和第一个数组中相应的项目顺序一致。
Array
(
[0] => 6
[1] => 10
[2] => 100
[3] => 101
)
Array
(
[0] => 5
[1] => 1
[2] => 6
[3] => 3
)
例2
$ar = array(
array("b10", 'c11', 101, 100, "a"),
array(1,