$pie = array('Apple' => 1, 'Cherry' => 3, 'Pumpkin' => 6);
reset($pie);
while (list($k, $v) = each($pie)) {
echo "$k => $v'n";
$desserts[]=$pie;
}
如果注释掉$desserts[]=$pie
行,则此代码块将按预期执行。
为什么当它没有注释时会进入无限循环?
我不明白为什么会这样。 这是不该做什么的完美例子,但我不明白为什么一遍又一遍地打印完整的数组。 我以为只有第一片会重复。
在手册中,它警告你不要做你正在做的事情。
注意:因为将数组分配给另一个变量会重置原始数组指针,所以如果我们
$fruit
分配给循环内的另一个变量,我们上面的示例将导致无限循环。
请参阅each()
文档。
如果您只想制作许多副本,则可以使用 array_fill 获得相同的结果$pie
.
$desserts = array_fill(0,count($pie),$pie);
您可以通过使用 foreach
循环而不是 while
循环来避免此循环:
$pie = array('Apple' => 1, 'Cherry' => 3, 'Pumpkin' => 6);
foreach($pie as $k => $v){
echo "$k => $v'n";
$desserts[]=$pie;
}
$pie = array('Apple' => 1, 'Cherry' => 3, 'Pumpkin' => 6);
reset($pie);
while (list($k, $v) = each($pie)) {
echo "$k => $v'n";
$desserts[]=$pie;
}
没有那么多意义。您基本上是在复制$pie中每个条目的$pie数组。
使用 foreach 会更安全。下面的样本是否会更贴近预期的结果?
$pie = array('Apple' => 1, 'Cherry' => 3, 'Pumpkin' => 6);
$desserts = array();
foreach($pie as $fruit => $count){
$dessert = array(
'fruit' => $fruit,
'count' => $count
);
$desserts[] = $dessert;
}