PHP:$ _SESSION不能在页面中多次使用?

时间:2012-07-24 05:19:57

标签: php list session while-loop repeat

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

2 个答案:

答案 0 :(得分: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>"; 

答案 1 :(得分: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()。