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)前缀表示以反方向排序。

三、排序
例子:

1     $arr = array("Ben"=>"2","peter"=>"10","Joe"=>"30");
2     echo "-------------echo array-------------<br>";
3     foreach ($arr as $key => $value) {
4         # code...
5         echo "key= ".$key.",value= ".$value."<br>";
6     }

1、排序数值数组:
  1)、sort:默认的排序,即按键值升序排序,因为该函数用于排序一维数组,所有排序出来的键名会被重新规定,关联数组用此方法排序,则关联数组的键名不被保留,换成的是数字键。
  2)、rsort:该函数与sort函数用法类似,不同的是按键值逆序排序。

 1     echo "-------------sorts by sort-------------<br>";
 2     sort($arr);
 3     foreach ($arr as $key => $value) {
 4         # code...
 5         echo "key= ".$key.",value= ".$value."<br>";
 6     }
 7 
 8     echo "-------------sorts by rsort-------------<br>";
 9     rsort($arr);
10     foreach ($arr as $key => $value) {
11         # code...
12         echo "key= ".$key.",value= ".$value."<br>";
13     }

输出结果:
-------------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:按关联数组的键名逆序排序,排序的结果保留键值的关联关系。

 1     echo "-------------sorts by ksort--------------<br>";
 2     ksort($arr);
 3     foreach ($arr as $key => $value) {
 4         # code...
 5         echo "key= ".$key.",value= ".$value."<br>";
 6     }
 7 
 8     echo "-------------sorts by krsort-------------<br>";
 9     krsort($arr);
10     foreach ($arr as $key => $value) {
11         # code...
12         echo "key= ".$key.",value= ".$value."<br>";
13     }

 输出结果:
-------------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:按关联数组的键值逆序排序,排序的结果保留键值的关联关系。

 1     echo "-------------sorts by asort-------------<br>";
 2     asort($arr);
 3     foreach ($arr as $key => $value) {
 4         # code...
 5         echo "key= ".$key.",value= ".$value."<br>";
 6     }
 7 
 8     echo "-------------sorts by arsort-------------<br>";
 9     arsort($arr);
10     foreach ($arr as $key => $value) {
11         # code...
12         echo "key= ".$key.",value= ".$value."<br>";
13     }

输出结果:
-------------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

 

 
 

转载于:https://www.cnblogs.com/Renyi-Fan/p/10646288.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值