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.3.3 使用循环语句 - 图1

图 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/>”;


以上代码可以将当前元素重新设置到数组开始处,因此允许再次遍历数组。