PHP数组的排序(附带实例)
本节讲解 PHP 程序中如何对一维和多维数组进行排序操作。
rsort()、arsort() 和 krsort() 等函数则正好与所对应的升序排序相反,都为降序排序。
首先需要设定一个排序方法,也就是建立一个排序函数。再通过 usort() 函数对特定数组采用特定排序方法进行排序。下面的案例介绍多维数组排序,具体步骤如下。
上述这个排序的结果是正向排序,那么如何进行反向排序呢?这就需要对排序方法进行调整。其中,recompare() 替换上述代码中的 compare() 的相反判断,同样采用 usort() 函数输出后,即可得到反向排序,正好与前一段程序的输出顺序相反。
一维数组排序
下面通过实例展示如何对数组进行排序,具体操作步骤如下。<?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 每天。
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
上述这个排序的结果是正向排序,那么如何进行反向排序呢?这就需要对排序方法进行调整。其中,recompare() 替换上述代码中的 compare() 的相反判断,同样采用 usort() 函数输出后,即可得到反向排序,正好与前一段程序的输出顺序相反。