PHP数组排序函数的学习笔记
PHP有下面几个数组排序函数:
arsort
, asort
, krsort
, ksort
, rsort
, sort
, uasort
, uksort
, usort
.
主要做两方面分析:
- 升序 OR 降序
- 排序计算规则
升序 OR 降序
除含有字母 u
的排序函数外,带有 r
字母的为 降序,其余为升序.
Q:这里为什么除带有 u
字母的函数?
A:因为带有 u
字母的排序函数的排序规则是自定义的,既可以升序也可以降序。
是不是很好记?
排序规则
函数 | 排序规则 | 注意 |
---|---|---|
sort | 依据数组键值进行升序排序,如果是多维数组则默认取每个子元素的第一个元素进行比较 | 键值对数组排序之后会重置键名,从0开始 |
rsort | 同上,只不过是降序排序 | 同上 |
asort | 依据数组的键值进行升序排序,如果是多维数组则默认取每个子元素的第一个元素进行比较 | 同 sort 函数不同的是,该函数不会对键名进行重置 |
arsort | 同上,降序 | 同上 |
ksort | 依据数组的键名进行升序排序 | - |
krsort | 同上,降序 | - |
usort | 依据函数键值进行自定义规则排序 | 排序会重置键名,从0开始 |
uksort | 依据函数的键名进行自定义规则排序 | - |
uasort | 依据函数的键值进行自定义规则排序 | - |
Demo
Q:给定下面的数组,请按照 distance
进行升序排序?
<?php
$stores = [
[
'name' => '商家1',
'distance' => 12,
],
[
'name' => '商家2',
'distance' => 3,
],
[
'name' => '商家3',
'distance' => 34,
],
[
'name' => '商家4',
'distance' => 1,
],
[
'name' => '商家5',
'distance' => 19,
],
[
'name' => '商家6',
'distance' => 28,
],
];
Demo:
<?php
$stores = [
[
'name' => '商家1',
'distance' => 12,
],
[
'name' => '商家2',
'distance' => 3,
],
[
'name' => '商家3',
'distance' => 34,
],
[
'name' => '商家4',
'distance' => 1,
],
[
'name' => '商家5',
'distance' => 19,
],
[
'name' => '商家6',
'distance' => 28,
],
];
usort($stores, function ($a, $b) {
if ($a['distance'] == $b['distance']) {
return 0;
}
return $a['distance'] > $b['distance'] ? 1 : -1;
});
print_r($stores);
Output:
Array
(
[0] => Array
(
[name] => 商家4
[distance] => 1
)
[1] => Array
(
[name] => 商家2
[distance] => 3
)
[2] => Array
(
[name] => 商家1
[distance] => 12
)
[3] => Array
(
[name] => 商家5
[distance] => 19
)
[4] => Array
(
[name] => 商家6
[distance] => 28
)
[5] => Array
(
[name] => 商家3
[distance] => 34
)
)
That's All.^ - ^.
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭