Php 在while循环中指定数组会导致无限循环
如果注释掉了Php 在while循环中指定数组会导致无限循环,php,arrays,while-loop,infinite-loop,Php,Arrays,While Loop,Infinite Loop,如果注释掉了$desserts[]=$pie行,则此代码块按预期执行 为什么当它未注释时会进入无限循环 我不明白为什么会这样。这是一个完美的例子,说明了什么是不应该做的,但我不明白为什么要一遍遍地打印整个阵列。我以为只会重复第一个片段。在手册中,它警告您不要做您正在做的事情 注意:由于将数组分配给另一个变量会重置原始数组指针,因此如果将$fruit分配给循环中的另一个变量,上面的示例将导致无止境循环 如果您只想制作多份$pie,则可以使用获得相同的结果 $pie = array('Apple'
$desserts[]=$pie
行,则此代码块按预期执行
为什么当它未注释时会进入无限循环
我不明白为什么会这样。这是一个完美的例子,说明了什么是不应该做的,但我不明白为什么要一遍遍地打印整个阵列。我以为只会重复第一个片段。在手册中,它警告您不要做您正在做的事情 注意:由于将数组分配给另一个变量会重置原始数组指针,因此如果将
$fruit
分配给循环中的另一个变量,上面的示例将导致无止境循环
如果您只想制作多份$pie
,则可以使用获得相同的结果
$pie = array('Apple' => 1, 'Cherry' => 3, 'Pumpkin' => 6);
reset($pie);
while (list($k, $v) = each($pie)) {
echo "$k => $v\n";
$desserts[]=$pie;
}
在手册中,它警告您不要做您正在做的事情 注意:由于将数组分配给另一个变量会重置原始数组指针,因此如果将
$fruit
分配给循环中的另一个变量,上面的示例将导致无止境循环
如果您只想制作多份$pie
,则可以使用获得相同的结果
$pie = array('Apple' => 1, 'Cherry' => 3, 'Pumpkin' => 6);
reset($pie);
while (list($k, $v) = each($pie)) {
echo "$k => $v\n";
$desserts[]=$pie;
}
您可以通过使用
foreach
循环而不是while
循环来避免此循环:
$desserts = array_fill(0,count($pie),$pie);
您可以通过使用
foreach
循环而不是while
循环来避免此循环:
$desserts = array_fill(0,count($pie),$pie);
没什么意义。您基本上是为$pie中的每个条目复制$pie数组
使用foreach会更安全。下面的示例是否会更接近预期结果
$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);
reset($pie);
while (list($k, $v) = each($pie)) {
echo "$k => $v\n";
$desserts[]=$pie;
}
是的,这是一个不应该做的例子。我就是无法理解这种行为。如果指针被重置,那么为什么输出不是反复的“Apple=>1”呢?@Swoop-PHP在修改方法时使用副本中的数组。当您使用
$desserts[]=$pie代码>在更改某些内容之前,这些值实际上不会复制到$desserts
。因此,在PHP发现$pie
和$deserts
不再相同之前,reset
可能不会发生,这可能是在$pie
到达数组末尾时发生的。是的,这是一个不应该做的示例。我就是无法理解这种行为。如果指针被重置,那么为什么输出不是反复的“Apple=>1”呢?@Swoop-PHP在修改方法时使用副本中的数组。当您使用$desserts[]=$pie代码>在更改某些内容之前,这些值实际上不会复制到$desserts
。因此,在PHP发现$pie
和$deserts
不再相同之前,reset
可能不会发生,这可能是在$pie
到达数组末尾时发生的。