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

6.5 遍历数组

所谓数组的遍历是要把数组中的变量值读取出来。下面讲述遍历数组的常见方法。

6.5.1 遍历一维数字索引数组

下面讲解如何通过循环语句遍历一维数字索引数组。此案例中用到了for循环和foreach循环。

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

      <? php
      $roomtypes = array( ’单床房’, ’标准间’, ’三床房’, 'VIP套房’);
      for ($i = 0; $i < 3; $i++){
        echo $roomtypes[$i]."(for循环)<br />";
      }
      foreach ($roomtypes as $room){
        echo $room."(foreach循环)<br />";
      }
    ?>

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

图6-5 程序运行结果

【案例分析】

(1)for循环只进行了0、1、2三次;

(2)foreach循环则列出了数组中的所有数组元素。

6.5.2 遍历一维联合索引数组

下面以遍历酒店房间类型为例对联合索引数组进行遍历。

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

    <? php
      $prices_per_day = array(’单床房’=> 298, ’标准间’=> 268, ’三床房’=> 198, 'VIP套房
      '=> 368);
      foreach ($prices_per_day as $price){
        echo $price."<br />";
      }
      foreach ($prices_per_day as $key => $value){
        echo $key.":".$value." 每天。<br />";
      }
      reset($prices_per_day);
      while ($element = each($prices_per_day)){
        echo $element['key']."\t";
        echo $element['value'];
        echo "<br />";
      }
      reset($prices_per_day);
      while (list($type, $price) = each($prices_per_day)){
      echo "$type - $price<br />";
      }
    ?>

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

图6-6 程序运行结果

【案例分析】

(1)其中,foreach ($prices_per_day as $price){} 遍历数组元素,所以输出4个整型数字。而foreach ($prices_per_day as $key => $value){}则除了遍历数组元素,还遍历其所对应的关键字,如“单床房”是数组元素298的关键字。

(2)这段程序中使用了while循环,还用到了几个新的函数,即reset()、each()和list()。由于在前面的代码中,$prices_per_day已经被foreach循环遍历过,而内存中的实时元素为数组的最后一个元素。因此,如果想用while循环来遍历数组,就必须用reset()函数把实时元素重新定义为数组的开头元素。each()则是用来遍历数组元素及其关键字的函数。list()则是把each()中的值分开赋值和输出的函数。

6.5.3 遍历多维数组

下面以使用多维数组编写房间类型为例进行遍历,具体操作步骤如下。

【例6.6】(实例文件:ch06\6.6.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
                            )
      );
      for ($row = 0; $row < 4; $row++){
        while (list($key, $value ) = each( $roomtypes[$row])){
          echo "$key:$value"."\t |";
      }
        echo '<br />';
      }
    ?>

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

图6-7 程序运行结果

【案例分析】

(1)$roomtypes中的每个数组元素都是一个数组,而作为数组元素的数组又都有三个拥有键名的数组元素。

(2)使用for循环配合each()、list()函数来遍历数组元素,便得到如图6-7所示的输出。