0

这可能是一个愚蠢的问题,对任何令人困惑的句子感到抱歉。我不知道我是否可以很好地解释这个问题以使您理解,但$_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']?谢谢你。

4

2 回答 2

2

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

从数组中返回当前键值对并推进数组游标。

在 each() 执行后,数组光标将留在数组的下一个元素上,或者如果它到达数组的末尾,则超过最后一个元素。如果要reset()使用 each 再次遍历数组,则必须使用。

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 回答