PHP数组排序函数有哪些
PHP数组排序函数有哪些
一、总结
一句话总结:其实也就是是否保持索引,对键排序还是对值排序,除了sort,rsort.shuffle,usort外,都是保持索引的
是否保持索引 键排序 值排序
除了sort,rsort.shuffle,usort外,都是保持索引的
1、a(association)前缀表示以键值关联排序;
2、k(key)前缀表示以键名关联排序;
3、r(reverse)前缀表示以反方向排序。
函数名称 | 排序依据 | 数组索引键保持 | 排序的顺序 | 相关函数 |
---|---|---|---|---|
array_multisort() | 值 | 键值关联的保持,数字类型的不保持 | 第一个数组或者由选项指定 | array_walk() |
asort() | 值 | 是 | 由低到高 | arsort() |
arsort() | 值 | 是 | 由高到低 | asort() |
krsort() | 键 | 是 | 由高到低 | ksort() |
ksort() | 键 | 是 | 由低到高 | asort() |
natcasesort() | 值 | 是 | 自然排序,大小写不敏感 | natsort() |
natsort() | 值 | 是 | 自然排序 | natcasesort() |
rsort() | 值 | 否 | 由高到低 | sort() |
shuffle() | 值 | 否 | 随机 | array_rand() |
sort() | 值 | 否 | 由低到高 | rsort() |
uasort() | 值 | 是 | 由用户定义 | uksort() |
uksort() | 键 | 是 | 由用户定义 | uasort() |
usort() | 值 | 否 | 由用户定义 | uasort() |
1、排序sort函数中的前缀a/k/r/u分别代表什么意思?
a-association k-key r-reverse u-user
1、a(association)前缀表示以键值关联排序;
2、k(key)前缀表示以键名关联排序;
3、r(reverse)前缀表示以反方向排序。
二、PHP 数组排序函数sort,rsort,ksort,krsort,asort,arsort区别
参考:PHP 数组排序函数sort,rsort,ksort,krsort,asort,arsort区别 - TimeStory - 博客园
https://www.cnblogs.com/TimeStory/p/4201385.html
一、概念:
1、自然排序法:即按自然数的大小排序,例如“10>2”;
2、计算机标准排序法:是以逐个字符比较,排序,例如“2>10”(因为第一位2>1);
3、数值数组:带有数字 ID 键的数组;
4、关联数组:带有指定的键的数组,每个键关联一个值。
5、默认的排序为按键值升序排序,排序方式为自然排序。
二、【帮助理解】
1、a(association)前缀表示以键值关联排序;
2、k(key)前缀表示以键名关联排序;
3、r(reverse)前缀表示以反方向排序。
三、排序
例子:
$arr = array("Ben"=>"2","peter"=>"10","Joe"=>"30");
echo "-------------echo array-------------<br>";
foreach ($arr as $key => $value) {
# code...
echo "key= ".$key.",value= ".$value."<br>";
}
1、排序数值数组:
1)、sort:默认的排序,即按键值升序排序,因为该函数用于排序一维数组,所有排序出来的键名会被重新规定,关联数组用此方法排序,则关联数组的键名不被保留,换成的是数字键。
2)、rsort:该函数与sort函数用法类似,不同的是按键值逆序排序。
echo "-------------sorts by sort-------------<br>";
sort($arr);
foreach ($arr as $key => $value) {
# code...
echo "key= ".$key.",value= ".$value."<br>";
} echo "-------------sorts by rsort-------------<br>";
rsort($arr);
foreach ($arr as $key => $value) {
# code...
echo "key= ".$key.",value= ".$value."<br>";
}
输出结果:
-------------echo array-------------
key= Ben,value= 2
key= peter,value= 10
key= Joe,value= 30
-------------sorts by sort-------------
key= 0,value= 2
key= 1,value= 10
key= 2,value= 30
-------------sorts by rsort-------------
key= 0,value= 30
key= 1,value= 10
key= 2,value= 2
2、排序关联数组:
关联数组的排序有两种排序项,第一种以数组的键名排序,第二种以数组的键值排序。
按键名排序:
1)、ksort:按关联数组的键名升序排序,排序的结果保留键值的关联关系。
2)、krsort:按关联数组的键名逆序排序,排序的结果保留键值的关联关系。
echo "-------------sorts by ksort--------------<br>";
ksort($arr);
foreach ($arr as $key => $value) {
# code...
echo "key= ".$key.",value= ".$value."<br>";
} echo "-------------sorts by krsort-------------<br>";
krsort($arr);
foreach ($arr as $key => $value) {
# code...
echo "key= ".$key.",value= ".$value."<br>";
}
输出结果:
-------------echo array-------------
key= Ben,value= 2
key= peter,value= 10
key= Joe,value= 30
-------------sorts by ksort--------------
key= Ben,value= 2
key= Joe,value= 30
key= peter,value= 10
-------------sorts by krsort-------------
key= peter,value= 10
key= Joe,value= 30
key= Ben,value= 2
按键值排序:
1)、asort:按关联数组的键值升序排序,排序的结果保留键值的关联关系
2)、arsort:按关联数组的键值逆序排序,排序的结果保留键值的关联关系。
echo "-------------sorts by asort-------------<br>";
asort($arr);
foreach ($arr as $key => $value) {
# code...
echo "key= ".$key.",value= ".$value."<br>";
} echo "-------------sorts by arsort-------------<br>";
arsort($arr);
foreach ($arr as $key => $value) {
# code...
echo "key= ".$key.",value= ".$value."<br>";
}
输出结果:
-------------echo array-------------
key= Ben,value= 2
key= peter,value= 10
key= Joe,value= 30
-------------sorts by asort-------------
key= Ben,value= 2
key= peter,value= 10
key= Joe,value= 30
-------------sorts by arsort-------------
key= Joe,value= 30
key= peter,value= 10
key= Ben,value= 2
三、用户自定义排序函数
参考:PHP: 对数组进行排序 - Manual
https://www.php.net/manual/zh/array.sorting.php
PHP 有一些用来排序数组的函数, 这个文档会把它们列出来。
主要区别有:
- 有些函数基于 array 的键来排序, 而其他的基于值来排序的:$array['key'] = 'value';。
- 排序之后键和值之间的关联关系是否能够保持, 是指排序之后数组的键可能 会被重置为数字型的(0,1,2 ...)。
- 排序的顺序有:字母表顺序, 由低到高(升序), 由高到低(降序),数字排序,自然排序,随机顺序或者用户自定义排序。
- 注意:下列的所有排序函数都是直接作用于数组本身, 而不是返回一个新的有序的数组。
- 以下函数对于数组中相等的元素,它们在排序后的顺序是未定义的。 (也即相等元素之间的顺序是不稳定的)。
函数名称 | 排序依据 | 数组索引键保持 | 排序的顺序 | 相关函数 |
---|---|---|---|---|
array_multisort() | 值 | 键值关联的保持,数字类型的不保持 | 第一个数组或者由选项指定 | array_walk() |
asort() | 值 | 是 | 由低到高 | arsort() |
arsort() | 值 | 是 | 由高到低 | asort() |
krsort() | 键 | 是 | 由高到低 | ksort() |
ksort() | 键 | 是 | 由低到高 | asort() |
natcasesort() | 值 | 是 | 自然排序,大小写不敏感 | natsort() |
natsort() | 值 | 是 | 自然排序 | natcasesort() |
rsort() | 值 | 否 | 由高到低 | sort() |
shuffle() | 值 | 否 | 随机 | array_rand() |
sort() | 值 | 否 | 由低到高 | rsort() |
uasort() | 值 | 是 | 由用户定义 | uksort() |
uksort() | 键 | 是 | 由用户定义 | uasort() |
usort() | 值 | 否 | 由用户定义 | uasort() |
1、usort
usort — 使用用户自定义的比较函数对数组中的值进行排序
说明
本函数将用用户自定义的比较函数对一个数组中的值进行排序。 如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。
Note:
If two members compare as equal, their relative order in the sorted array is undefined.
Note: 此函数为
array
中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。
参数
array
-
输入的数组
cmp_function
-
在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。
返回值
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
Example #2 使用多维数组的 usort() 例子 <?php
function cmp($a, $b)
{
return strcmp($a["fruit"], $b["fruit"]);
} $fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes"; usort($fruits, "cmp"); while (list($key, $value) = each($fruits)) {
echo "$fruits[$key]: " . $value["fruit"] . "\n";
}
?>
当排序多维数组时,$a 和 $b 包含到数组第一个索引的引用。 以上例程会输出: $fruits[0]: apples
$fruits[1]: grapes
$fruits[2]: lemons
php闭包
多维数组排序
Example #4 usort() example using a closure to sort a multi-dimensional array <?php
$array[0] = array('key_a' => 'z', 'key_b' => 'c');
$array[1] = array('key_a' => 'x', 'key_b' => 'b');
$array[2] = array('key_a' => 'y', 'key_b' => 'a'); function build_sorter($key) {
return function ($a, $b) use ($key) {
return strnatcmp($a[$key], $b[$key]);
};
} usort($array, build_sorter('key_b')); foreach ($array as $item) {
echo $item['key_a'] . ', ' . $item['key_b'] . "\n";
}
?>
以上例程会输出: y, a
x, b
z, c
PHP数组排序函数有哪些的更多相关文章
- php数组排序函数
下边提到的几个数组函数的排序有一些共性: 1 数组被作为排序函数的参数,排序以后,数组本身就发生了改变,函数的返回值为bool类型.2 函数名中出现单a表示association,含义为,在按值排序的 ...
- 常用的php数组排序函数
分享几个php数组排序函数,每个函数出去sort是排序的意思前缀字母的含义分别代表: a 索引 k 数组键 r 逆向 u 用户自定义 顺序排序函数 sort — 对数组排序 ksort — 对数组按 ...
- 一个不错的PHP二维数组排序函数简单易用存用
一个不错的PHP二维数组排序函数简单易用存用 传入数组,传入排序的键,传入排序顺序 public function array_sort($arr,$keys,$type='asc') { $keys ...
- PHP的数组排序函数
<?php class order{ /** * * 数组排序 * @param array $arr 例如: * array ( array ( 'deskId' => '460646' ...
- Js数组排序函数sort()
JS实现多维数组和对象数组排序,用的其实就是原生sort()函数,语法为:arrayObject.sort(sortby)(sortby 可选.规定排序顺序.必须是函数.) 返回值为对数组的引用:请注 ...
- PHP数组排序函数array_multisort()函数详解
这个函数因为用到了,并且在网上找了半天终于找到了一个写的通俗易懂的文章,在这里分享给大家. 原文链接:http://blog.163.com/lgh_2002/blog/static/44017526 ...
- PHP数组排序函数array_multisort()函数详解(二)
array_multisort()这个函数可以对多个PHP数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列 例如array_multisort($a,$b),$a,$b是两个数组,如果排 ...
- PHP的一个牛逼的数组排序函数array_multisort
函数详情,具体可参考 官方手册 array_multisort 实际问题是这样的,有这么一组数据: $arr_times = array( array('2018-04-12 04:25:00', 3 ...
- JS中的数组排序函数sort()
JavaScript实现多维数组.对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序. sort() 方法用于对数组的元素进行排序.语法如下: arrayObject.sort ...
随机推荐
- Bootstrap3基础 input-group-btn 按钮与输入框 横向组合
内容 参数 OS Windows 10 x64 browser Firefox 65.0.2 framework Bootstrap 3.3.7 editor ...
- Bootstrap3基础 img-rounded 图片的四个角改成圆角
内容 参数 OS Windows 10 x64 browser Firefox 65.0.2 framework Bootstrap 3.3.7 editor ...
- L2-001:dijskstra + 多条最短路径 + 记录中间路径
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 思路: dijkstra算出最短路 ...
- js插入排序
插入排序 平均时间复杂度O(n*n) 最差情况O(n*n) 最好情况O(n) 空间复杂度O(1) 稳定性:稳定 function insertSort (arr) { var len = arr.le ...
- P4313 文理分科
思路 遇到这种利益冲突的最终利益最大化问题 考虑转化为最小割,使得损失的价值最小 相当于文科是S,理科是T,选出最小割就是确定损失代价最小的方案 然后就把S向每个点连一条cap=art[i][j]的边 ...
- 论文阅读: End-to-end Learning of Action Detection from Frame Glimpses in Videos
End-to-End Learning of Action Detection from Frame Glimpses in Videos CVPR 2016 Motivation: 本 ...
- 比原链设计思考: 扩展性UTXO模型
用户模型是比原链在最初就需要确定的重要数据结构, 团队的选择还是聚焦在两种典型的模型系统中,Account模型和UTXO模型,和其他大多数区块链设计一样, 选择了模型就决定了协议层的重要实现,两种模型 ...
- 分布式爬虫scrapy-redis中settings.py中的配置信息
SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 使用scrapy-redis的调度器 ITEM_PIPELINES = { 'sc ...
- python3.6配置libsvm2.2
参考自:https://blog.csdn.net/weixin_35884839/article/details/79398085 由于需要使用到libsvm,所以开始配这个,所幸一次性就成功了. ...
- HDU 4325 Flowers(树状数组+离散化)
http://acm.hdu.edu.cn/showproblem.php?pid=4325 题意:给出n个区间和m个询问,每个询问为一个x,问有多少个区间包含了x. 思路: 因为数据量比较多,所以需 ...