$pie = array('Apple' => 1, 'Cherry' => 3, 'Pumpkin' => 6);
reset($pie);
while (list($k, $v) = each($pie)) {
echo "$k => $v\n";
$desserts[]=$pie;
}
如果注释掉$desserts[]=$pie
行,则此代码块将按预期执行。
为什么当它被取消注释时会进入无限循环?
我不明白为什么会这样。这是不做的完美示例,但我不明白为什么要反复打印完整的数组。我以为只会重复第一片。
答案 0 :(得分:6)
在手册中,它警告你不要做你正在做的事情。
警告:因为将数组分配给另一个变量会重置原始数组指针,如果我们将
$fruit
分配给循环内的另一个变量,上面的示例会导致无限循环。
如果您只想制作$pie
的许多副本,则可以使用array_fill获得相同的结果。
$desserts = array_fill(0,count($pie),$pie);
答案 1 :(得分:1)
您可以使用foreach
循环而不是while
循环来避免此循环:
$pie = array('Apple' => 1, 'Cherry' => 3, 'Pumpkin' => 6);
foreach($pie as $k => $v){
echo "$k => $v\n";
$desserts[]=$pie;
}
答案 2 :(得分:1)
$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;
}