PHP foreach没有引用错过元素

时间:2013-10-05 22:43:25

标签: php foreach

我倾向于发现在不使用引用的情况下使用foreach结构时,数组的某些元素缺失。

$array = array();

/* ... */

$array[] = 1;
$array[] = 2;
$array[] = 3;

/* ... */

print_r($array); /* print_r always shows all elements */

foreach ($array as $element) { /* missing elements */ }
foreach ($array as &$element) { /* does a fine job */ }

我的代码中有三次独立出现。修复很容易(添加&),但它听起来像PHP或我的设置中的错误...

是否有更多人遇到这种情况?有什么问题?

PHP 5.4.12


修改

案例:

$a = array();
$a[] = 1;
$a[] = 2;
$a[] = 3;

foreach ($a as &$e)
{
    echo $e;
}

echo '<br>';

foreach ($a as $e)
{
    echo $e;
}

输出:

123
122

2 个答案:

答案 0 :(得分:0)

刚刚确认。

<?php
  $x[]=1;
  $x[]=2;
  $x[]=3;
  $x[]=4;
  foreach($x as $y) {
    var_dump($y);
  }
?>

int(1)int(2)int(3)int(4)

答案 1 :(得分:0)

似乎这个问题在PHP ver中得到了解决。 5.6.10。

我有一个包含8个元素的数组。这是var_dump:

array(8){[0] =&gt; string(18)“lname是必需的。” [1] =&GT; string(18)“fname是必需的。” [2] =&GT; string(18)“需要发送电子邮件。” [3] =&GT; string(22)“password1是必需的。” [4] =&GT; string(22)“password2是必需的。” [5] =&GT; string(44)“名字必须是字母和数字。” [6] =&GT; string(43)“姓氏必须是字母和数字。” [7] =&GT; string(22)“无效的电子邮件地址”}

我使用以下代码打印出数组:

foreach($ _SESSION ['error']为$ error){         打印$错误。 “
\ n” 个;     }

我的MAMP localhost使用 PHP ver。 5.6.10 ,结果完美

“lname是必需的。 fname是必需的。 需要电子邮件。 密码1是必需的。 密码2是必需的。 名字必须只是字母和数字。 姓氏必须只是字母和数字。 无效的电子邮件地址“

我的远程服务器使用 PHP ver。 5.3 ,在这种情况下,服务器仅打印第一个元素

“lname是必需的。”

当我改变Taco建议的代码时(foreach($ _SESSION ['error']为&amp; $ error))ver。 5.3。也给出了良好(和预期)的结果。