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 ...
随机推荐
- Stanford CS231n实践笔记(课时22卷积神经网络工程实践技巧与注意点 cnn in practise 上)
本课主要2个实践内容: 1.keras中数据集丰富,从数据集中提取更多特征(Data augmentation) 2.迁移学习(Tranform learning) 代码:https://github ...
- Codeforces 835F Roads in the Kingdom - 动态规划
题目传送门 传送点I 传送点II 传送点III 题目大意 给定一颗基环树,要求删去其中一条边,使得剩下的图形是一棵树,并且最长路的长度最短,求最长路的最短长度. 路径可以分为两部分:跨过环 和 在树内 ...
- 解决c1xx fatal error C1083 Cannot open source file
在项目开发过程中,遇到一个问题,一个工程B导入另外一个工程A的生产代码,出现这个错误,最后查阅资料发现是文件路径太深,导致文件路径字符超过了217字符. 写了一个测试Demo来验证: 一.新建Win3 ...
- python --- 25 模块和包
一.模块 1.导入方式 自己创建的模块名称 切不可和 内置模块的一样 ① import 模块 ② import 模块 as 名 设置在此空间的名称 ③ from 模块 import ...
- topcoder srm 320 div1
problem1 link 两个数字后面都有阶乘符号,可以抵消. import java.util.*; import java.math.*; import static java.lang.Mat ...
- 【做题】CF177G2. Fibonacci Strings——思维+数列
题意:定义斐波那契字符串为: $f_1 = $ "a" \(f_2 =\) "b" \(f_n = f_{n-1} + f_{n-2}, \, n > 2 ...
- html 之 img hspace 和 vspace 属性
案例<img src="w3school.gif" hspace="30" vspace="30" /> 描述 通常图形浏览器不 ...
- Visual Question Answering with Memory-Augmented Networks
Visual Question Answering with Memory-Augmented Networks 2018-05-15 20:15:03 Motivation: 虽然 VQA 已经取得 ...
- 数据结构和算法with Python
http://www.math.pku.edu.cn/teachers/qiuzy/ds_python/courseware/index.htm
- HDU 4303 Hourai Jeweled(树形DP)
http://acm.hdu.edu.cn/showproblem.php?pid=4303 题意:给出一棵树,树上的每一个节点都有一个权值,每条边有一个颜色,如果一条路径上相邻边的颜色都是不同的,那 ...