1. 数字型排序(sort_numeric)

整数排序

<?php
$arr = array(3, 100, 1, 20, 4, 0);
sort($arr, SORT_NUMERIC);

echo '<pre>';
print_r($arr);
?>

结果如下

Array
(
[0] => 0
[1] => 1
[2] => 3
[3] => 4
[4] => 20
[5] => 100
)

含小数排序

<?php
$arr = array(2, 2.4, 1.2, 100, 10, 1.5, 1);
sort($arr, SORT_NUMERIC);

echo '<pre>';
print_r($arr);
?>

结果如下

Array
(
[0] => 1
[1] => 1.2
[2] => 1.5
[3] => 2
[4] => 2.4
[5] => 10
[6] => 100
)

2.字符串型排序(sort_string)

数字字符串

<?php
$arr = array(1,2,19,34,23);
sort($arr, SORT_STRING);

echo '<pre>';
print_r($arr);
?>

结果如下:

Array
(
[0] => 1
[1] => 19
[2] => 2
[3] => 23
[4] => 34
)

3.自然排序(SORT_NATURAL)

例1

<?php
$arr = array('2 ft 7 in', '1 ft 5 in', '10 ft 2 in', '2 ft 11 in', '7 ft 6 in');
sort($arr, SORT_STRING);

echo '<pre>';
print_r($arr);
?>

输出结果:

Array
(
[0] => 1 ft 5 in
[1] => 10 ft 2 in
[2] => 2 ft 11 in
[3] => 2 ft 7 in
[4] => 7 ft 6 in
)

例2

<?php
$arr = array('2 ft 7 in', '1 ft 5 in', '10 ft 2 in', '2 ft 11 in', '7 ft 6 in');
sort($arr, SORT_NATURAL);

echo '<pre>';
print_r($arr);
?>

输出结果

Array
(
[0] => 1 ft 5 in
[1] => 2 ft 7 in
[2] => 2 ft 11 in
[3] => 7 ft 6 in
[4] => 10 ft 2 in
)

4.大小写不敏感[SORT_FLAG_CASE]

// can be combined (bitwise OR) with SORT_STRING or SORT_NATURAL to sort strings case-insensitively

例1

<?php
$arr = array('orange', 'Orange', 'apple','Apple');
sort($arr, SORT_STRING);

echo '<pre>';
print_r($arr);
?>

输出结果

Array
(
[0] => Apple
[1] => Orange
[2] => apple
[3] => orange
)
单纯的string排序,是按照ascii排序的
因为大写字母比小写字母的ascii排序靠前,排序也更靠前
所以,输出的结果是:Apple,Orange,apple,orange

例2

<?php
$arr = array('orange', 'Orange', 'apple','Apple');
sort($arr, SORT_FLAG_CASE | SORT_STRING);

echo '<pre>';
print_r($arr);
?>

输出结果:

Array
(
[0] => apple
[1] => Apple
[2] => orange
[3] => Orange
)

按照string不敏感方式排序,先将大写字母转换成小写字母,再按ascii码排序

例3

<?php
$arr = array('orange', 'Orange', 'Apple','apple');
sort($arr, SORT_FLAG_CASE | SORT_STRING);

echo '<pre>';
print_r($arr);
?>

输出结果

Array
(
[0] => Apple
[1] => apple
[2] => orange
[3] => Orange
)
和例2对比结果是不稳定的, Apple, apple的顺序是不定的,
它只能保证, 都是小写字母的情况下,不同的字符串的排序, 但是对于不同的大小写字符串转换为相同的小写字符串时,排序不保证的

例4

<?php
$arr = array('2 ft 7 In', '1 ft 5 in', '10 ft 2 in', '2 Ft 11 in', '7 Ft 6 in');
sort($arr,  SORT_NATURAL);

echo '<pre>';
print_r($arr);
?>

输出结果

Array
(
[0] => 1 ft 5 in
[1] => 2 Ft 11 in
[2] => 2 ft 7 In
[3] => 7 Ft 6 in
[4] => 10 ft 2 in
)

例5

<?php
$arr = array('2 ft 7 In', '1 ft 5 in', '10 ft 2 in', '2 Ft 11 in', '7 Ft 6 in');
sort($arr,  SORT_NATURAL | SORT_FLAG_CASE);

echo '<pre>';
print_r($arr);
?>

输出结果

Array
(
[0] => 1 ft 5 in
[1] => 2 ft 7 In
[2] => 2 Ft 11 in
[3] => 7 Ft 6 in
[4] => 10 ft 2 in
)

例4 中的2 Ft 11 in, 2 ft 7 In,这个不符合自然排序
而4.5 用sort_flag_case来消除了大小写敏感的限制, 修正成为大小写不敏感的自然排序,排序结果更符合人类理解

总结:

现在再来看这个注释,就容易理解了
can be combined (bitwise OR) with SORT_STRING or SORT_NATURAL to sort strings case-insensitively
必须要和其他排序方式一起使用,意味着,只有两种用法:

SORT_FLAG_CASE | SORT_STRING
SORT_FLAG_CASE | SORT_NATURAL

整体的介绍页面:https://www.php.net/manual/en/function.sort.php