首页 > 编程笔记 > PHP笔记 阅读:9

PHP数组的排序(附带实例)

本节讲解 PHP 程序中如何对一维和多维数组进行排序操作。

一维数组排序

下面通过实例展示如何对数组进行排序,具体操作步骤如下。
<?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/>";
}
?>
运行结果为:

0:VIP套房
1:三床房
2:单床房
3:标准间
三床房:198 每日。
标准间:268 每日。
单床房:298 每日。
VIP套房:368 每日。
VIP 套房:368 每天。
三床房:198 每天。
单床房:298 每天。
标准间:268 每天。
0:标准间
1:单床房
2:三床房
3:VIP套房
VIP 套房:368 每日。
单床房:298 每日。
标准间:268 每日。
三床房:198 每日。
标准间:268 每天。
单床房:298 每天。
三床房:198 每天。
VIP 套房:368 每天。

这段代码用于展示数组排序的功能涉及 sort()、asort()、ksort() 和 rsort()、arsort()、krsort() 等函数。其中 sort() 是默认排序;asort() 根据数组元素值的升序排序;ksort() 根据数组元素的键值,也就是关键字的升序排序。

rsort()、arsort() 和 krsort() 等函数则正好与所对应的升序排序相反,都为降序排序。

多维数组的排序

对于一维数组,通过 sort() 等一系列排序函数就可以对它进行排序。而对于多维数组,排序就没有那么简单了。

首先需要设定一个排序方法,也就是建立一个排序函数。再通过 usort() 函数对特定数组采用特定排序方法进行排序。下面的案例介绍多维数组排序,具体步骤如下。
<?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');

$arrayiter = new RecursiveArrayIterator($roomtypes);
$iteriter = new RecursiveIteratorIterator($arrayiter);
// 直接打印即可按照横向顺序打印出来
foreach ($iteriter as $key => $val) {
    echo $key.'=>'.$val.'<br/>';
}
?>
运行结果为:

type=>三床房
info=>此房间备有三张床
price_per_day=>198
type=>标准间
info=>此房间为两床标准配置。
price_per_day=>268
type=>单床房
info=>此房间为单人单间。
price_per_day=>298
type=>VIP套房
info=>此房间为 VIP 两间内外套房
price_per_day=>368

函数 compare() 定义了排序方法,通过对 price_per_day 这一数组元素的对比进行排序。然后 usort() 采用 compare 方法对 $roomtypes 这一多维数组进行排序。

上述这个排序的结果是正向排序,那么如何进行反向排序呢?这就需要对排序方法进行调整。其中,recompare() 替换上述代码中的 compare() 的相反判断,同样采用 usort() 函数输出后,即可得到反向排序,正好与前一段程序的输出顺序相反。

相关文章