1. 前言
在 PHP 中,sort()、asort() 和 ksort() 都是用来处理数组排序的函数。本文将分别介绍这三个函数的用法和区别,并举例说明它们的使用场景。
2. sort()
sort(array &$array, int $flags = SORT_REGULAR): true
对数组本身按照值(value)升序排序。排序后原来的数组将改变。对应的降序函数是rsort();
函数返回值始终是True。
对于索引数组和关联数组,排序后都会改变原有的键名,按照新的索引定义键名。
//Example #1 索引数组
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
print_r($fruits);
结果是:Array ( [0] => apple [1] => banana [2] => lemon [3] => orange )
//Example #2 关联数组
$arr = ['l' => 'lemon', 'o' => 'orange', 'a' => 'apple', 'b' => 'banana'];
sort($arr);
print_r($arr);
// 实现了value升序,但key会重新定义
结果是: Array ( [0] => apple [1] => banana [2] => lemon [3] => orange )
3. ksort()
ksort(array &$array, int $flags = SORT_REGULAR): true
对数组本身按照键名(key)升序排序。排序后原来的数组将改变。对应的降序函数是krsort();
函数返回值始终是True。
常用于关联数组,排序后不改变对应的value值。
//Example #1 关联数组
$arr = ['l' => 'lemon', 'o' => 'orange', 'a' => 'apple', 'b' => 'banana'];
ksort($arr);
print_r($arr);
// 实现了key排序,key和value保留对应关系
结果是: Array ( [a] => apple [b] => banana [l] => lemon [o] => orange )
4. asort()
asort(array &$array, int $flags = SORT_REGULAR): true
对数组自身按照值(value)升序排序,并依然保持数组的键与值的关联。对应的降序函数是arsort();
函数返回值始终是True。
相对于sort()函数排序后会改变原有的key,如果业务中希望排序后不改变原有的key,则asort()函数可以满足我们的需求。
$arr = ['a' => 'Tom', 'b' => 'Bob', 'c' => 'Carry', 'd' => 'Davi'];
asort($arr);
print_r($arr);
// 实现了value升序,也保留了key和value的对应关系
结果是: Array ( [b] => Bob [c] => Carry [d] => Davi [a] => Tom)
总结
从上面的示例中可以看出:
- 如果业务中需根据value排序,同时不考虑key的变化,建议使用sort()函数。
- 如果业务中需要根据key排序,使用ksort()函数。
- 如果业务中需要根据value排序,同时保持key值不变,使用asort()函数。
- rsort()、krsort()、arsort()用于降序处理,用法与上面相同。
以上的说明对您是否有帮助,关注作者一起交流吧。