0

これはばかげた質問であり、紛らわしい文章で申し訳ありません。この問題を理解できるほど十分に説明できるかどうかはわかりませんが、$_SESSION1ページに複数回繰り返すことはできないようです。

session_start();
while (list($a, $b) = each($_SESSION['temp']))
  echo "<li>$a - $b</li>";

上記のコードは問題$_SESSION['temp']ありませんが、以下と同じページにある場合は、何も表示されません...

session_start();
while (list($a, $b) = each($_SESSION['temp']))
  echo "<li>$a - $b</li>";
while (list($c, $d) = each($_SESSION['temp']))
  echo "<li>$c - $d</li>";                            /* <=== nothing shown :( */

から値を取得するには$_SESSION['temp'],、新しい名前を付ける必要があります。

session_start();

$temp = $_SESSION['temp'];                            /* <== new name */
while (list($a, $b) = each($_SESSION['temp']))
  echo "<li>$a - $b</li>";
while (list($c, $d) = each($temp))
  echo "<li>$c - $d</li>";                            /* <=== now shown :) */

$_SESSION['temp']同じページで2回以上使用できない理由を教えてください。から値を取得するためのより良い方法はあります$_SESSION['temp']か?ありがとうございました。

4

2 に答える 2

2

http://php.net/manual/en/function.each.php

配列から現​​在のキーと値のペアを返し、配列カーソルを進めます。

each()が実行された後、配列カーソルは配列の次の要素に残されます。配列の最後に到達した場合は、最後の要素を超えます。reset()それぞれを使用して配列を再度トラバースする場合は、を使用する必要があります。

session_start();
while (list($a, $b) = each($_SESSION['temp']))
  echo "<li>$a - $b</li>";

reset($_SESSION);

while (list($c, $d) = each($_SESSION['temp']))
  echo "<li>$c - $d</li>"; 
于 2012-07-24T05:32:18.933 に答える
1

他の答えは正しいですが、より良い方法があります:

foreach ($_SESSION['temp'] as $a => $b) {
    // do what you wanted with each item
};
// repeat the code here

foreachループは使用後にリセットする必要がないため、使用が簡単です(http://php.net/manual/en/control-structures.foreach.php):

foreachが最初に実行を開始すると、内部配列ポインターは自動的に配列の最初の要素にリセットされます。これは、foreachループの前にreset()を呼び出す必要がないことを意味します。

于 2012-07-24T05:41:27.133 に答える