本节将讲解如何对一维和多维数组进行排序操作。
6.6.1 一维数组排序
下面通过实例展示如何对数组进行排序,具体操作步骤如下。
【例6.6】
<?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/>";
}
?>
运行结果如图6-8所示。
【案例分析】
(1)这段代码用于展示数组排序的功能涉及sort()、asort()、ksort()和rsort()、arsort()、krsort()等函数。其中,sort()是默认排序。asort()根据数组元素值的升序排序。ksort()根据数组元素的键值,也就是关键字的升序排序。
(2)rsort()、arsort()和krsort()等函数则正好与所对应的升序排序相反,都为降序排序。
6.6.2 多维数组排序
对于一维数组,通过sort()等一系列排序函数就可以对它进行排序。而对于多维数组,排序就没有那么简单了。首先需要设定一个排序方法,也就是建立一个排序函数。再通过usort()函数对特定数组采用特定排序方法进行排序。下面的案例介绍多维数组排序,具体步骤如下。
【例6.7】
运行结果如图6-9所示。
【案例分析】
(1)函数compare()定义了排序方法,通过对price_per_day这一数组元素的对比进行排序。然后usort()采用compare方法对$roomtypes这一多维数组进行排序。
(2)上述这个排序的结果是正向排序,那么如何进行反向排序呢?这就需要对排序方法进行调整。其中,recompare()替换上述代码中的compare()的相反判断,同样采用usort()函数输出后,即可得到反向排序,正好与前一段程序的输出顺序相反。修改后的部分代码如下:
function recompare($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, 'recompare');