一、sort函数介绍
sort()
是一个 PHP 函数,用于对数组进行升序排列,相反,rsort()
函数则是降序排列。sort()
函数使用内部算法对数组处理,而不是使用外来程序库。
$arr = array(5,3,7,1,9);
sort($arr);
print_r($arr);
/*输出:
Array
(
[0] => 1
[1] => 3
[2] => 5
[3] => 7
[4] => 9
)
*/
二、sort函数的参数
sort()
函数有两个必需参数,其中第一个参数是待排序的数组,第二个参数是可选的排序方式。
1
表示升序排列,即从小到大排序;0
或未传入参数表示降序排列,即从大到小排序。
$arr = array(5,3,7,1,9);
sort($arr, 1);
print_r($arr);
/*输出:
Array
(
[0] => 1
[1] => 3
[2] => 5
[3] => 7
[4] => 9
)
*/
$arr = array(5,3,7,1,9);
sort($arr, 0);
print_r($arr);
/*输出:
Array
(
[0] => 9
[1] => 7
[2] => 5
[3] => 3
[4] => 1
)
*/
三、sort函数对字符串/中文字符串/多维数组的排序
1.字符串
sort()
函数也可以使用在字符串中,可以进行简单的字母排序,将单词按字母顺序重排。例如:
$str = "hello world";
$arr = str_split($str);
sort($arr);
$str = implode("", $arr);
echo $str;
/*输出:
dehllloorw
*/
2.中文字符串
当需要对中文字符串进行排序时,需要使用到 ICU 的支持。可以使用 intl
扩展来实现,具体代码如下:
if (extension_loaded("intl")) {
$arr = array("北京", "上海", "深圳", "广州");
$arrLenth = [];
foreach ($arr as $value) {
$arrLenth[] = grapheme_strlen($value);
}
array_multisort($arrLenth, SORT_ASC, $arr);
print_r($arr);
} else {
echo "intl扩展未安装";
}
/*输出:
Array
(
[0] => 北京
[1] => 广州
[2] => 上海
[3] => 深圳
)
*/
3.多维数组
多维数组的排序可以使用 uasort()
函数和 usort()
函数,两者的区别在于回调函数的传参方式不同。usort()
传参只有两个,比较的两个元素,而 uasort()
则传3个参数,第一个是待排序的数组,第二个是比较的两个元素,第三个则是比较方式。以下代码为根据数组某个项进行排序示例:
$arr = array(
array("name" => "张三", "age" => 20),
array("name" => "李四", "age" => 18),
array("name" => "王五", "age" => 22),
);
usort($arr, function ($a, $b) {
if ($a["age"] == $b["age"]) {
return 0;
}
return ($a["age"] < $b["age"]) ? -1 : 1;
});
print_r($arr);
/*输出:
Array
(
[0] => Array
(
[name] => 李四
[age] => 18
)
[1] => Array
(
[name] => 张三
[age] => 20
)
[2] => Array
(
[name] => 王五
[age] => 22
)
)
*/
四、结语
sort()
函数是 PHP 中实现简单快捷的数组排序的常用函数,但使用时需要注意在字符串/中文字符串/多维数组的排序情况下,需要特别处理,才能实现符合需求的排序。