1

我倾向于发现,在不使用引用的情况下使用 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
4

2 回答 2

0

Just confirmed.

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

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

于 2013-10-05T22:52:07.897 回答
0

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

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

array(8) { [0]=> string(18) "lname 是必需的。" [1]=> string(18) "fname 是必需的。" [2]=> string(18) "电子邮件是必需的。" [3]=> string(22) "密码 1 是必需的。" [4]=> 字符串(22)“需要密码 2。” [5]=> string(44) "名字只能是字母和数字。" [6]=> string(43) "姓氏只能是字母和数字。" [7]=> string(22) "无效的电子邮件地址" }

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

foreach ($_SESSION['error'] as $error) { print $error . "
\n"; }

我的 MAMP localhost 使用PHP 版本。5.6.10,结果很完美

“lname 是必需的。fname 是必需的。email 是必需的。password1 是必需的。password2 是必需的。名字只能是字母和数字。姓氏只能是字母和数字。电子邮件地址无效”

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

“lname 是必需的。”

当我按照 Taco 的建议更改代码时(foreach ($_SESSION['error'] as &$error)) 5.3. 也给出了好的(和预期的)结果。

于 2015-08-01T21:19:39.447 回答