PHP:$_SESSION可以';不要在一页中使用多次


PHP: $_SESSION can't be used more than once in a page?

这可能是一个愚蠢的问题,很抱歉有任何令人困惑的句子。。我不知道我是否能很好地解释这个问题,让你理解,但$_SESSION似乎无法在一页上重复不止一次。

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']不能在同一页上使用两次或两次以上吗?有没有更好的方法从$_SESSION['temp']中获取值?非常感谢。

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

从数组中返回当前键和值对,并移动数组光标。

执行each()后,数组光标将留在数组的下一个元素上,如果它碰到数组的末尾,则会超过最后一个元素。如果要使用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>"; 

另一个答案是正确的,但有更好的方法:

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()。