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 — 使用用户自定义的比较函数对数组中的值进行排序

说明

usort ( array &$array , callable $value_compare_func ) : bool

本函数将用用户自定义的比较函数对一个数组中的值进行排序。 如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。

Note:

If two members compare as equal, their relative order in the sorted array is undefined.

Note: 此函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。

参数

array

输入的数组

cmp_function

在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。

callback ( mixed $amixed $b ) : int
Caution

Returning non-integer values from the comparison function, such as float, will result in an internal cast to integer of the callback's return value. So values such as 0.99 and 0.1 will both be cast to an integer value of 0, which will compare such values as equal.

返回值

成功时返回 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数组排序函数有哪些的更多相关文章

  1. php数组排序函数

    下边提到的几个数组函数的排序有一些共性: 1 数组被作为排序函数的参数,排序以后,数组本身就发生了改变,函数的返回值为bool类型.2 函数名中出现单a表示association,含义为,在按值排序的 ...

  2. 常用的php数组排序函数

    分享几个php数组排序函数,每个函数出去sort是排序的意思前缀字母的含义分别代表: a 索引 k 数组键 r 逆向 u 用户自定义 顺序排序函数 sort — 对数组排序  ksort — 对数组按 ...

  3. 一个不错的PHP二维数组排序函数简单易用存用

    一个不错的PHP二维数组排序函数简单易用存用 传入数组,传入排序的键,传入排序顺序 public function array_sort($arr,$keys,$type='asc') { $keys ...

  4. PHP的数组排序函数

    <?php class order{ /** * * 数组排序 * @param array $arr 例如: * array ( array ( 'deskId' => '460646' ...

  5. Js数组排序函数sort()

    JS实现多维数组和对象数组排序,用的其实就是原生sort()函数,语法为:arrayObject.sort(sortby)(sortby 可选.规定排序顺序.必须是函数.) 返回值为对数组的引用:请注 ...

  6. PHP数组排序函数array_multisort()函数详解

    这个函数因为用到了,并且在网上找了半天终于找到了一个写的通俗易懂的文章,在这里分享给大家. 原文链接:http://blog.163.com/lgh_2002/blog/static/44017526 ...

  7. PHP数组排序函数array_multisort()函数详解(二)

    array_multisort()这个函数可以对多个PHP数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列 例如array_multisort($a,$b),$a,$b是两个数组,如果排 ...

  8. PHP的一个牛逼的数组排序函数array_multisort

    函数详情,具体可参考 官方手册 array_multisort 实际问题是这样的,有这么一组数据: $arr_times = array( array('2018-04-12 04:25:00', 3 ...

  9. JS中的数组排序函数sort()

    JavaScript实现多维数组.对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序. sort() 方法用于对数组的元素进行排序.语法如下: arrayObject.sort ...

随机推荐

  1. k8s (kubernetes) 代码分析

    简易入门 结构图: debug 先了解 etcd API源码分析 API server 是中心. https://www.jianshu.com/p/88c6ed78b668 $ git ls-fil ...

  2. Matlab绘制三维曲面(以二维高斯函数为例)

    原文地址为:Matlab绘制三维曲面(以二维高斯函数为例) 寒假学习了一下Python下的NumPy和pymatlab,感觉不是很容易上手.来学校之后,决定继续看完数字图像处理一书.还是想按照上学期的 ...

  3. 正则表达式验证HTTP地址是否合法

    转载:https://blog.csdn.net/fsdad/article/details/52637426 判断url是否合法 const std::regex urlpattern(" ...

  4. \n和\r区别

    转载:https://www.cnblogs.com/hq233/p/6389234.html 符号    ASCII码      意义\n        10        换行NL\r       ...

  5. Linux 使用statvfs读取文件系统信息

    本文转载自:https://blog.csdn.net/papiping/article/details/6980573 在测试过程中,f_bfree的值比f_frsize的值大于10%的尺寸大小,意 ...

  6. linux内核中的IPIs是什么?

    答: 处理器间中断(Interprocessor Interrupts)

  7. upc组队赛1 黑暗意志【stl-map】

    黑暗意志 题目描述 在数千年前潘达利亚从卡利姆多分离之时,迷雾笼罩着这块新形成的大陆,使它不被外来者发现.迷雾同样遮蔽着这片大陆古老邪恶的要塞--雷神的雷电王座.在雷神统治时期,他的要塞就是雷电之王力 ...

  8. ZOJ 3962 Seven Segment Display(数位DP)题解

    题意:给一个16进制8位数,给定每个数字的贡献,问你贡献和. 思路:数位DP,想了很久用什么表示状态,看题解说用和就行,其他的都算是比较正常的数位DP. 代码: #include<iostrea ...

  9. Tutorials on training the Skip-thoughts vectors for features extraction of sentence.

    Tutorials on training the Skip-thoughts vectors for features extraction of sentence.  1. Send emails ...

  10. webpack用 babel将ES6转译ES5

    webpack webpack.config.js配置文件 module.exports = { entry: './es6.js', // 入口文件路径 output: { filename: &q ...