假設有如下數組:
我们要根据年龄来排序
排序方法1:
$arr = [
['name'=>'tom','age'=>'2'],
['name'=>'lisa','age'=>'9'],
['name'=>'jerry','age'=>'12'],
['name'=>'tony','age'=>'8']
];
$age = array_column($arr,'age');
array_multisort($age,SORT_ASC,$arr);
解析:
首先拿到年级组成的数组:
得到:
使用array_multisort 进行排序:
array_multisort:
第一个参数要排序的数组
第二个参数为排序规则(正序或者倒序)
第三个参数为参数设定选项:
排序类型标志:
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 之后。 提供的数组和之前的数组要有相同数量的元素。 换言之,排序是按字典顺序排列的。
它是将第一个参数(数组),根据第二个参数的规则进行排序,然后再根据第一个参数排序后的顺序去排列第三个参数(二位数组)的顺序
得到:
排序方法2:
$arr = [
['name'=>'tom','age'=>'2'],
['name'=>'lisa','age'=>'9'],
['name'=>'jerry','age'=>'12'],
['name'=>'tony','age'=>'8']
];
usort($arr,"my_sort");
function my_sort($a,$b){
if($a['age']==$b['age']) return 0;
return $a['age']<$b['age']?-1:1;
}
返回
解析:
usort() 通过用户自定义的比较函数对数组进行排序。
如上面的代码 判断$a['age']<$b['age'] 若是成立返回 <=1的数值,反之亦然 那么数组是按照从小到大的排序;
若是要按照从大到小的排序。则要改成
return $a['age']<$b['age']?1:-1;