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 */ }

私のコードでは、これが 3 回独立して発生しました。修正は簡単 (& を追加) ですが、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

確認したところです。

<?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) "password1 が必要です。" [4]=> string(22) "password2 が必要です。" [5]=> string(44) "名は文字と数字のみである必要があります。" [6]=> string(43) "姓は文字と数字のみである必要があります。" [7]=> string(22) "メールアドレスが無効です" }

次のコードを使用して配列を出力します。

foreach ($_SESSION['error'] as $error) { $error を出力します。"
\n"; }

私の MAMP localhost はPHP バージョンを使用しています。5.6.10で、結果は完璧です:

「lname が必要です。fname が必要です。email が必要です。password1 が必要です。password2 が必要です。名は文字と数字のみである必要があります。姓は文字と数字のみである必要があります。電子メール アドレスが無効です」

私のリモートサーバーはPHPバージョンを使用しています。5.3であり、この場合、サーバーは最初の要素のみを出力します。

「名前が必要です。」

Taco が提案したようにコードを変更すると (foreach ($_SESSION['error'] as &$error))、ver. 5.3. また、良い(そして期待される)結果が得られました。

于 2015-08-01T21:19:39.447 に答える