PHP中使用foreach和while each输出关联数组,只能显示其中一个

<?php
$prices = array( 'Tires'=>100 );

$prices[ 'Oil' ] = 10;

$prices[ 'Spark plugs' ] = 4;

echo $prices['Oil'].'<br />';
foreach ($prices as $key => $value) {
    echo $key.' - '.$value.'<br />';    
}

while($element = each($prices)){
    echo $element[ 'key' ];
    echo ' - ';
    echo $element[ 'value' ];
    echo '<br />';
}

?>

注释掉两种输出方式中的任何一个,另一个都可以正常输出;
但是把它们放在一起后,却只能输出其中一个。
然而, 我把两种输出方式的顺序调转后,发现两个都可以输出。
请问,何解?

OK,我想明白了。这和foreach的原理有关。
foreach每执行一次,数组内部的指针后移一步,待输出完毕后,指针已经指向'\0'元素了。
因此随后的while(each)不会输出任何结果,因为它相当于在读取一个空数组。
解决的方法是reset($prices),使数组的指针指向首元素,然后执行第二种输出方法。

还是感谢亲的回答!

phpforeach

<?php
$prices = array( 'Tires'=>100 );

$prices[ 'Oil' ] = 10;

$prices[ 'Spark plugs' ] = 4;
echo $prices['Oil'].'
';
foreach ($prices as $key => $value) {
echo $key.' - '.$value.'
';

}