Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用foreach和while循环(使用each()函数)在php中迭代数组是否有任何特殊规则?_Php_Foreach_While Loop - Fatal编程技术网

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

使用foreach和while循环(使用each()函数)在php中迭代数组是否有任何特殊规则?,php,foreach,while-loop,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:$v

我是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>";

}
但当我改变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>";

}
为什么第二个脚本不显示while循环的输出。原因是什么。

这是因为
each()
只返回当前键/值,然后推进内部计数器(当前在数组中的位置)。它不会重置它

第一个循环(
foreach
)将内部计数器设置为数组的末尾,因此第二个循环认为它已经完成,因此不执行任何操作

在使用
each()
启动循环之前,需要在数组上调用
reset()

reset($arr1);
while(列表($key,$value)=每个($arr1)){
echo“$key有$value
”; }
谢谢@sverri-m-olsen
$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>";

}
fname:niraj 
lname:kaushal 
city:lucknow 
reset($arr1);
while (list($key, $value) = each($arr1)){
    echo "$key has $value value <br>";
}