6.7 数组排序

6.7 数组排序

我们也知道一些排序算法,如冒泡排序、堆排序、希尔排序和快速排序.排序在编程中经常用到.PHP提供了能以多种不同方式对数组排序的大量有用的函数,从而简化了这个过程.这也体现了php是非常方便的.下面将详细结束这些函数

提示   默认情况下,PHP的排序函数按英语指定的规则进行排序.如果需要按另一种语言的约定进行排序,比如法语或德语,就需要修改此默认行为,可以使用setlocale()函数设置你的本地化环境(locale).
注意:在英语字母的排序中是区分大小写的.如D会排在a的前面

/*********************************************
* PHPfans系列教程:
* http://www.phpfans.net/bbs/forumdisplay.php?fid=25
* 作 者: 我不是鱼
* Email:[email protected]
* 博 客:  http://www.phpfans.net/space/?2
*********************************************/

sort ( array &$array [, int $sort_flags] )
sort()函数会对target_array进行排序,各元素按值由低到高的顺序排列.注意,它并不是返回排序后的数组.相反,它只是对当前数组排序,不论结果如何都不返回任何值.
注意: 本函数为 array 中的单元赋予新的键名.这将删除原有的键名而不仅是重新排序.

示例:

[复制到剪切板]
CODE:
<?php 
$arr 
= array(5,2,6,8,4,1);
sort($arr);
print_r($arr);
?> ;


输出:
Array
(
    [0] => 1
    [1] => 2
    [2] => 4
    [3] => 5
    [4] => 6
    [5] => 8
)
可以看到键值关联不再保持.


asort ( array &$array [, int $sort_flags] )
本函数对数组进行排序,数组的索引保持和单元的关联.主要用于对那些单元顺序很重要的结合数组进行排序.

示例:

[复制到剪切板]
CODE:
<?php 
$arr 
= array(5,2,6,8,4,1);
asort($arr);
print_r($arr);
?> ;


输出:
Array
(
    [5] => 1
    [1] => 2
    [4] => 4
    [0] => 5
    [2] => 6
    [3] => 8
)
可以看到键值保持不变


rsort ( array &$array [, int $sort_flags] )

rsort()函数与sort()相同,只是它以相反的顺序(降序)对数组元素排序.示例如下:

[复制到剪切板]
CODE:
<?php 
$arr 
= array(5,2,6,8,4,1);
rsort($arr);
print_r($arr);
?> ;


输出
Array
(
    [0] => 8
    [1] => 6
    [2] => 5
    [3] => 4
    [4] => 2
    [5] => 1
)
arsort ( array &$array [, int $sort_flags] )
arsort()函数与asort()相同,只是它以相反的顺序(降序)对数组元素排序.示例如下:

示例:

[复制到剪切板]
CODE:
<?php 
$arr 
= array(5,2,6,8,4,1);
arsort($arr);
print_r($arr);
?> ;


输出:
Array
(
    [3] => 8
    [2] => 6
    [0] => 5
    [4] => 4
    [1] => 2
    [5] => 1
)
ksort ( array &$array [, int $sort_flags] )
和sort的区别有对数组按照键名排序而不是按值排序,保留键名到数据的关联.本函数主要用于关联数组. 如果成功则返回 TRUE,失败则返回 FALSE.
示例:

[复制到剪切板]
CODE:
<?php 
$arr 
= array(
   
'phpfans' => 'www.phpfans.net',
   
'php' => 'www.php.net',
   
'mysql' => 'www.mysql.com',
   
'apache' => 'www.apache.org'
);
ksort($arr);
print_r($arr);
?> ;


输出:
Array
(
    [apache] => www.apache.org
    [mysql] => www.mysql.com
    [php] => www.php.net
    [phpfans] => www.phpfans.net
)
krsort ( array &$array [, int $sort_flags] )
对数组按照键名逆向排序,保留键名到数据的关联.主要用于结合数组. 如果成功则返回 TRUE,失败则返回 FALSE.
示例:

[复制到剪切板]
CODE:
<?php 
$arr 
= array(
   
'phpfans' => 'www.phpfans.net',
   
'mysql' => 'www.mysql.com',
   
'php' => 'www.php.net',
   
'apache' => 'www.apache.org'
);
krsort($arr);
print_r($arr);
?> ;


输出:
Array
(
    [phpfans] => www.phpfans.net
    [php] => www.php.net
    [mysql] => www.mysql.com
    [apache] => www.apache.org
)
natsort ( array &$array )

本函数实现了一个和人们通常对字母数字字符串进行排序的方法一样的排序算法并保持原有键/值的关联,这被称为“自然排序”.本算法和通常的计算机字符串排序算法(用于 sort())的区别见下面示例.

如果成功则返回 TRUE,失败则返回 FALSE.
php手册中有个非常经典的例子

[复制到剪切板]
CODE:
<?php
$array1 
$array2 = array("img12.png""img10.png""img2.png""img1.png");

sort($array1);
echo 
"Standard sorting\n";
print_r($array1);

natsort($array2);
echo 
"\nNatural order sorting\n";
print_r($array2);
?> ;


上例将输出:
Standard sorting
Array
(
    [0] => img1.png
    [1] => img10.png
    [2] => img12.png
    [3] => img2.png
)

Natural order sorting
Array
(
    [3] => img1.png
    [2] => img2.png
    [1] => img10.png
    [0] => img12.png
)
natcasesort ( array &$array )

本函数实现了一个和人们通常对字母数字字符串进行排序的方法一样的排序算法并保持原有键/值的关联,这被称为“自然排序”. 如果成功则返回 TRUE,失败则返回 FALSE.
示例:

[复制到剪切板]
CODE:
<?php
$array1 
$array2 = array('IMG0.png''img12.png''img10.png''img2.png''img1.png''IMG3.png');

sort($array1);
echo 
"Standard sorting\n";
print_r($array1);

natcasesort($array2);
echo 
"\nNatural order sorting (case-insensitive)\n";
print_r($array2);
?> ;


上例将输出:
Standard sorting
Array
(
    [0] => IMG0.png
    [1] => IMG3.png
    [2] => img1.png
    [3] => img10.png
    [4] => img12.png
    [5] => img2.png
)

Natural order sorting (case-insensitive)
Array
(
    [0] => IMG0.png
    [4] => img1.png
    [3] => img2.png
    [5] => IMG3.png
    [2] => img10.png
    [1] => img12.png
)
array_reverse ( array $array [, bool $preserve_keys] )

array_reverse() 接受数组 array 作为输入并返回一个单元为相反顺序的新数组,如果 preserve_keys 为 TRUE 则保留原来的键名.注意函数并不对原函数作任何修改.
示例:

[复制到剪切板]
CODE:
<?php 
$arr 
= array(
   
'phpfans' => 'www.phpfans.net',
   
'php' => 'www.php.net',
   
'mysql' => 'www.mysql.com',
   
'apache' => 'www.apache.org'
);
$new_arr array_reverse($arr);
print_r($new_arr);
?> ;


输出:
Array
(
    [apache] => www.apache.org
    [mysql] => www.mysql.com
    [php] => www.php.net
    [phpfans] => www.phpfans.net
)
array_multisort()usort()排序,具体内容请参考手册,这里就不作介绍了.
如履薄冰

顶下
期待后面的几章呵呵

先顶再看。