PHP 7从入门到精通(视频教学版)
上QQ阅读APP看书,第一时间看更新

6.6 数组排序

本节主要讲述如何对一维和多维数组进行排序操作。

6.6.1 一维数组排序

下面通过以下实例展示如何对数组排序,具体操作步骤如下。

【例6.7】(实例文件:ch06\6.7.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 />";
      }
    ?>

运行结果如图6-8所示。

图6-8 程序运行结果

【案例分析】

(1)这段代码是关于数组排序的内容,涉及sort()、asort()、ksort()和rsort()、arsort()、krsort()。其中,sort()是默认排序。asort()根据数组元素值的升序排序。ksort()根据数组元素的键值,也就是关键字的升序排序。

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

6.6.2 多维数组排序

对于一维数组,通过sort()等一系列的排序函数就可以对它进行排序。而对于多维数组,排序就没有那么简单了。首先需要设定一个排序方法,也就是建立一个排序函数。再通过usort()函数对特定数组采用特定排序方法来进行排序。下面的案例介绍多维数组排序,具体步骤如下。

【例6.8】(实例文件:ch06\6.8.php)

    <? 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 />';
      }
    ?>

运行结果如图6-9所示。

图6-9 程序运行结果

【案例分析】

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

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