php中的几个经典排序函数(sort,asort,ksort等)

1
2
3
4
5
6
7
8
sort() 函数用于对数组单元从低到高进行排序。
rsort() 函数用于对数组单元从高到低进行排序。
asort() 函数用于对数组单元从低到高进行排序并保持索引关系。
arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。
ksort() 函数用于对数组单元按照键名从低到高进行排序。
krsort() 函数用于对数组单元按照键名从高到低进行排序。
natsort():对数组使用 自然算法 进行排序。
array_multisort():对多个数组或多维数组进行排序。

 

sort()

PHP sort() 函数用于对数组单元从低到高进行排序,如果成功则返回 TRUE,失败则返回 FALSE。

注意:本函数会为排序的数组中的单元赋予新的键名,这将删除原有的键名而不仅是重新排序。

语法:

1
bool sort( array &array [, int sort_flags] )

例子:

1
2
3
$arr = array("b", "a", "c");
sort($arr);
print_r($arr);

 
运行该例子输出:

1
Array ( [0] => a [1] => b [2] => c )

 
在本例中, $arr 数组单元被按照字母顺序排序,而数组单元经过排序后,键值重新分配。

rsort()

PHP rsort() 函数行为与 sort() 相反,对数组单元进行由高到低排序,请参考 sort() 函数使用。

asort()

PHP asort() 函数用于对数组单元从低到高进行排序并保持索引关系,如果成功则返回 TRUE,失败则返回 FALSE。

语法:

1
bool asort( array &array [, int sort_flags] )

可选参数 sort_flags 用以改变排序的行为,具体参见 sort()。

例子:

1
2
3
$arr = array("b", "a", "c");
asort($arr);
print_r($arr);

 
运行该例子输出:

1
Array ( [1] => a [0] => b [2] => c )

 

 

arsort()

PHP arsort() 函数行为与 asort() 相反,对数组单元进行由高到低排序并保持索引关系,请参考 asort() 函数使用。

ksort()

PHP ksort() 函数用于对数组单元按照键名从低到高进行排序,如果成功则返回 TRUE,失败则返回 FALSE。

本函数会保留原来的键名,因此常用于关联数组。

语法:

1
bool ksort( array &array [, int sort_flags] )

可选参数 sort_flags 用以改变排序的行为,具体参见 sort()。

例子:

1
2
3
$arr = array("b"=>18, "a"=>20, "c"=>25);
ksort($arr);
print_r($arr);

 
运行该例子输出:

1
2
3
Array ( [a] => 20 [b] => 18

=> 25 )

 

krsort()

PHP krsort() 函数行为与 ksort() 相反,对数组单元按照键名进行由高到低排序,请参考 ksort() 函数使用。

 

natsort()

PHP natsort() 函数用于对数组使用 自然算法 进行排序,如果成功则返回 TRUE,失败则返回 FALSE。

本函数实现了一个和人们通常对字母数字字符串进行排序的方法一样的排序算法并保持原有键名和值的关联。

语法:

1
bool natsort ( array &array )

natsort() 和 sort() 排序比较:

1
2
3
4
5
6
7
$arr1 = $arr2 = array("a1", "a11", "a2");
sort($arr1);
print_r($arr1);
echo '
';
natsort($arr2);
print_r($arr2);

 
运行该例子输出:

1
2
Array ( [0] => a1 [1] => a11 [2] => a2 )
Array ( [0] => a1 [2] => a2 [1] => a11 )

 

natcasesort()

natcasesort() 函数行为与 natsort() 函数完全一致,区别之处在于 natcasesort() 不对数组单元区分大小写。

 

array_multisort()

函数用于对多个数组或多维数组进行排序。

PHP array_multisort() 函数用于一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序,如果成功则返回 TRUE,失败则返回 FALSE。

注意:关联(string)键名保持不变,但数字键名会被重新索引。

语法:

1
bool array_multisort( array1 [, sort_order][, sort_flags][, array2] ... )

 
array1 为必须参数,需要排序的数组。
每个数组之后不能指定两个同类的排序标志,且每个数组后指定的排序标志仅对该数组有效,如果缺少对应标志将采用默认值。

输入数组被当成一个表的列并以行来排序,这类似于 SQL 的 ORDER BY 子句功能。第一个数组是要排序的主要数组,单元的值相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。

例子1:

1
2
3
4
5
$arr1 = array(1, 3, 2, 4);
$arr2 = array("a", "b", "c", "d");
array_multisort($arr1, $arr2);
print_r($arr1);
print_r($arr2);

 
运行该例子输出:

1
2
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
Array ( [0] => a [1] => c [2] => b [3] => d )

 
可见第一个主要数组经过排序后,后面的数组会受到第一个数组的影响而保持对应关系。就上面的例子,哪怕给 arr2 加上 SORT_DESC (降序排列)参数,也不会影响到 arr2 的排序结果。这种影响在多维数组里也存在。

例子2,主数组单元值有同样的情况:

1
2
3
4
5
$arr1 = array(1, 2, 2, 4);
$arr2 = array("a", "b", "c", "d");
array_multisort($arr1, SORT_DESC, $arr2, SORT_ASC);
print_r($arr1);
print_r($arr2);

 
运行该例子输出:

1
2
Array ( [0] => 4 [1] => 2 [2] => 2 [3] => 1 )
Array ( [0] => d [1] => b [2] => c [3] => a )

 
例子3,多维数组排序:

1
2
3
$arr = array (array (1, 2, 3, 4), array ("a", "b", "b", "d"));
array_multisort($arr[0], SORT_DESC, $arr[1], SORT_ASC);
print_r($arr);

 
运行该例子输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Array
(
[0] => Array
(
[0] => 4
[1] => 2
[2] => 2
[3] => 1
)

[1] => Array
(
[0] => d
[1] => b
[2] => c
[3] => a
)
)

 
例子4,数字与字符混合:

1
2
3
$arr = array (array ("11", 2, 2, "a"), array (1, 2, 3, 4));
array_multisort($arr[0], SORT_ASC, SORT_STRING, $arr[1], SORT_NUMERIC, SORT_DESC);
var_dump($arr);

 
运行该例子输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
array(2) {
[0]=>
array(4) {
[0] => string(2) "11"
[1] => int(2)
[2] => int(2)
[3] => string(1) "a"
}
[1]=>
array(4) {
[0] => int(1)
[1] => int(3)
[2] => int(2)
[3] => int(4)
}
}

如果key都为数字的话,排序后都重新索引了,为了不让他索引就得把key改成字符串。例如把key都加上aa。排序完后在str_replace(‘aa’,’’,$array);

坚持原创技术分享,您的支持将鼓励我继续创作!