7.5数组排序
7.5 数组排序
本章节主要讲述如何对一维和多维数组进行排序操作。
7.5.1 一维数组排序
以下实例展示如何对数组排序,具体操作步骤如下。
【例7.7】(实例文件:ch07\7.7.php)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/
DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><h2>GoodHome房间类
型。</h2></HEAD>
<BODY>
<?php
$roomtypes = array( "单床房","标准间","三床房","VIP套房");
$prices_per_day = array("单床房"=> 298,"标准间"=> 268,"三床房"=> 198,"VIP套房"=> 368);
sort($roomtypes);
foreach ($roomtypes as $key => $value){
echo $key.":".$value."<br />";
}
asort($prices_per_day);
foreach ($prices_per_day as $key => $value){
echo $key.":".$value." 每日。<br />";
}
ksort($prices_per_day);
foreach ($prices_per_day as $key => $value){
echo $key.":".$value." 每天。<br />";
}
rsort($roomtypes);
foreach ($roomtypes as $key => $value){
echo $key.":".$value."<br />";
}
arsort($prices_per_day);
foreach ($prices_per_day as $key => $value){
echo $key.":".$value." 每日。<br />";
}
krsort($prices_per_day);
foreach ($prices_per_day as $key => $value){
echo $key.":".$value." 每天。<br />";
}
?>
</BODY>
</HTML>
运行结果如图7-8所示。

图7-8 程序运行结果
【案例分析】
这段代码是关于数组排序的内容,涉及sort()、asort()、ksort()和rsort()、arsort()、krsort()。其中,sort()是默认排序,asort()根据数组元素的值的升序排序,ksort()是根据数组元素的键值,也就是关键字的升序排序;rsort()、arsort()和krsort()则正好与所对应的升序排序相反,都为降序排序。
7.5.2 多维数组排序
对于一维数组,通过sort()、asort()等一系列的排序函数,就可以对它进行排序。而对于多维数组,排序就没有那么简单了。首先需要设定一个排序方法,也就是建立一个排序函数。再通过usort()函数对特定数组采用特定排序方法来进行排序。下面的案例介绍多维数组排序,具体步骤如下。
【例7.8】(实例文件:ch07\7.8.php)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/
DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><h2>GoodHome房间类型
(多维数组)。</h2></HEAD>
<BODY>
<?php
$roomtypes = array( array( "type"=>"单床房",
"info"=>"此房间为单人单间。",
"price_per_day"=>298
),
array( "type"=>"标准间",
"info"=>"此房间为两床标准配置。",
"price_per_day"=>268
),
array( "type"=>"三床房",
"info"=>"此房间备有三张床",
"price_per_day"=>198
),
array( "type"=>"VIP套房",
"info"=>"此房间为VIP两间内外套房",
"price_per_day"=>368
)
);
function compare($x, $y){
if ($x["price_per_day"] == $y["price_per_day"]){
return 0;
}else if ($x["price_per_day"] < $y["price_per_day"]){
return -1;
}else{
return 1;
}
}
usort($roomtypes, "compare");
for ($row = 0; $row < 4; $row++){
reset($roomtypes[$row]);
while (list($key, $value ) = each( $roomtypes[$row])){
echo "$key:$value"."\t |";
}
echo "<br />";
}
?>
</BODY>
</HTML>
运行结果如图7-9所示。

图7-9 程序运行结果
【案例分析】
(1)函数compare()定义了排序方法,通过对price_per_day这一数组元素的对比,进行排序。然后usort()采用compare方法对$roomtypes这一多维数组进行排序。
(2)如果这个排序的结果是正向排序,怎样进行反向排序呢?这就需要对排序方法进行调整。其中,recompare()就是上一段程序中compare()的相反判断,同样采用usort()函数输出后,得到如图7-9所示排序,正好与前一段程序输出顺序相反。
上一篇:7.4遍历数组
下一篇:7.6字符串与数组的转换
