3.3.3 使用循环语句
因为关联数组的索引不是数字,因此无法在for循环语句中使用一个简单的计数器对数组进行操作。但是可以使用foreach循环或list()和each()结构。
当使用foreach循环语句对关联数组进行操作时,foreach循环具有不同的结构。可以在前面的例子中使用这个循环语句,也可以按如下方式使用关键字:
foreach($prices as$key=>$value){
echo$key."-".$value."<br/>";
}
如下所示的代码将使用each()结构打印$prices数组的内容:
while($element=each($prices)){
echo$element['key'];
echo"-";
echo$element['value'];
echo"<br/>";
}
以上脚本段的输出结果如图3-2所示。
图 3-2 数组循环使用each()语句
在第1章中,介绍了while循环和echo语句。以上这段代码使用了前面从没有使用过的each()函数。这个函数将返回数组的当前元素,并将下一个元素作为当前元素。因为在while循环中调用each()函数,它将按顺序返回数组中每个元素,并且当它到达数组末尾时,循环操作将终止。
在这段代码中,变量$element是一个数组。当调用each()时,它将返回一个带有4个数值和4个指向数组位置的索引的数组。位置key和0包含了当前元素的关键字,而位置value和1包含了当前元素的值。虽然这与选哪一种方法没什么不同,但这里选择了使用命名位置,而不是数字索引位置。
此外,还有一种更为高级和常见的方式来完成相同的操作。函数list()可以用来将一个数组分解为一系列的值。可以按照如下方式将函数each()返回的两个值分开:
while(list($product,$price)=each($prices)){
echo"$product-$price<br/>";
}
以上代码使用each()从$prices数组中取出当前元素,并且将它作为数组返回,然后再指向下一个元素。它还使用list()将从each()返回的数组中所包含0、1两个元素变为两个名为$product和$price的新变量。
我们可以循环遍历整个$prices数组,使用如下所示的简短脚本显示它的内容:
reset($prices);
while(list($product,$price)=each($prices)){
echo"$product-$price<br/>";
}
这段代码的输出结果与前面脚本的输出结果相同,但它更容易阅读,因为list()允许为新变量命名。
需要注意的一点是,当使用each()函数时,数组将记录当前元素。如果希望在相同的脚本中两次使用该数组,就必须使用函数reset()将当前元素重新设置到数组开始处。要再次遍历prices数组,可以使用如下所示的代码:
reset($prices);
while(list($product,$price)=each($prices))
echo"$product-$price<br/>”;
以上代码可以将当前元素重新设置到数组开始处,因此允许再次遍历数组。