7.4遍历数组
7.4 遍历数组
所谓数组的遍历是要把数组中的变量值读取出来。下面讲述常见的遍历数组的方法。
7.4.1 遍历一维数字索引数组
下面讲解通过循环语句遍历一维数字索引数组。此案例中使用到for循环和foreach循环。
【例7.4】(实例文件:ch07\7.4.php)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/
DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><h2>GoodHome房间类
型。</h2></HEAD>
<BODY>
<?php
$roomtypes = array( "单床房","标准间","三床房","VIP套房");
for ($i = 0; $i < 3; $i++){
echo $roomtypes[$i]." (for循环)<br />";
}
foreach ($roomtypes as $room){
echo $room."(foreach循环)<br />";
}
?>
</BODY>
</HTML>
运行结果如图7-5所示。

图7-5 程序运行结果
【案例分析】
(1)for循环只进行了三次。
(2)foreach循环则列出了数组中所有数组元素。
7.4.2 遍历一维联合索引数组
下面遍历酒店房间类型为例对联合索引数组进行遍历。
【例7.5】(实例文件:ch07\7.5.php)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/
DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><h2>GoodHome房间类
型。</h2></HEAD>
<BODY>
<?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 />";
}
?>
</BODY>
</HTML>
运行结果如图7-6所示。

图7-6 程序运行结果
【案例分析】
(1)其中,foreach ($prices_per_day as $price){}遍历了数组元素,所以输出4个整型数字。而foreach ($prices_per_day as $key => $value){}则除了遍历了数组元素,还遍历了其所对应的关键字,如onebedroom是数组元素298的关键字。
(2)这段程序中使用了while循环,还用到了几个新的函数reset()、each()和list()。由于在前面的代码中,$prices_per_day已经被foreach循环遍历过,而内存中的实时元素为数组的最后一个元素。因此,如果想用while循环来遍历数组,就必须用reset()函数,把实时元素重新定义为数组的开头元素。each()则是用来遍历数组元素及其关键字的函数。list()则是把each()中的值分开赋值和输出的函数。
7.4.3 遍历多维数组
下面以使用多维数组编写房间类型为例进行遍历,具体操作步骤如下。
【例7.6】(实例文件:ch07\7.6.php)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/
DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><h2>GoodHome房间类型
(多维数组)。</h2></HEAD>
<BODY>
<?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 />";
}
?>
</BODY>
</HTML>
运行结果如图7-7所示。

图7-7 程序运行结果
【案例分析】
(1)$roomtypes中的每个数组元素都是一个数组,而作为数组元素的数组又都有三个拥有键名的数组元素。
(2)使用for循环配合each()、list()函数来遍历数组元素。
