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