是否有任何特殊规则使用foreach和while循环(使用each()函数)迭代php中的数组?

Nir*_*hal 4 php foreach while-loop

我是PHP新手.我的问题是,当我使用以下脚本时:

$arr1 = array('fname' => 'niraj','lname' => 'kaushal','city' => 'lucknow');

while(list($key, $value) = each($arr1)){

echo "$key has $value value <br>";

}

foreach($arr1 as $key => $value){

echo "$key:$value <br>";

}
Run Code Online (Sandbox Code Playgroud)

它输出

fname has niraj value 
lname has kaushal value 
city has lucknow value 
fname:niraj 
lname:kaushal 
city:lucknow
Run Code Online (Sandbox Code Playgroud)

但是当我改变foreach和while循环的顺序如下

$arr1 = array('fname' => 'niraj','lname' => 'kaushal','city' => 'lucknow');

foreach($arr1 as $key => $value){

echo "$key:$value <br>";

}

while(list($key, $value) = each($arr1)){

echo "$key has $value value <br>";

}
Run Code Online (Sandbox Code Playgroud)

它给出了以下输出

fname:niraj 
lname:kaushal 
city:lucknow 
Run Code Online (Sandbox Code Playgroud)

为什么第二个脚本不显示while循环的输出.它背后的原因是什么.

Sve*_*sen 7

这是因为each()只返回当前键/值然后推进内部计数器(当前阵列中的位置).它没有重置它.

第一个循环(foreach)将内部计数器设置为数组的末尾,因此第二个循环认为它已经完成,因此什么都不做.

您需要reset()在开始循环之前调用数组each():

reset($arr1);
while (list($key, $value) = each($arr1)){
    echo "$key has $value value <br>";
}
Run Code Online (Sandbox Code Playgroud)