Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
Php 在while循环中指定数组会导致无限循环_Php_Arrays_While Loop_Infinite Loop - Fatal编程技术网

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
到达数组末尾时发生的。