在$ _SESSION中添加数组

时间:2011-01-19 17:25:20

标签: php arrays session

我有一个调查脚本,每页有3个问题。当用户回答第一页上的问题并单击下一步时,上一页中的数据将存储在$_SESSION['survey']['data']中:

$data = postToArray($_POST, $ignore_fields);
$_SESSION['survey']['data'] = $data;

$data是一个类似于:

的数组
array('question' => 'answer', 'question' => 'answer');

postToArray做一些检查并稍微操纵实际提交,然后再将其返回$data

当用户在调查的第二页时,同样的事情发生了。我假设当$data通过$_SESSION['survey']['data'] = $data;添加到会话时,如果'question'(密钥)不存在,它会附加到会话数组,但是如果它存在(因为用户转到上一页并更改了他们的答案),将覆盖具有相同键的现有值,但最后一页的提交将覆盖会话中['data']数组中的所有内容。来考虑一下,这非常有意义。

我尝试了各种各样的东西,例如检索$_SESSION['survey']['data'],将其存储在数组中,读取最后一个提交,合并数组,然后在SESSION中重新保存所有内容,但是我的代码没有用完 - 这种方法有意义吗?这可能吗?

我也试过array_push,但没有运气。

此外,我尝试添加$_SESSION['survey']['data'][],至少保存所有内容(每个提交都在自己的数组中),但是如果用户返回页面,则会添加他们更改并重新提交的任何值作为另一个阵列。

最好是,我想要一个包含所有问题/答案的巨型数组,它会不断添加到该数组并使用现有密钥覆盖任何值。

最好的方法是什么?

谢谢, -Ryan

已实施解决方案

$data = postToArray($_POST, $ignore_fields);
foreach($data as $question => $answer)
{
    $_SESSION['survey']['data'][$question] = $answer;
}

3 个答案:

答案 0 :(得分:5)

尝试序列化数据,然后将其保存在会话变量中。

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

答案 1 :(得分:0)

循环遍历$ data数组并将其设置为naiquevin所述,$ _SESSION ['survey'] ['data'] [$ data ['question']] = $ data ['answer']。

答案 2 :(得分:0)

 <?php
  session_start();
  if(!isset($_POST["submit"])){
  $_SESSION["abc"]=array("C", "C++","JAVA","C#","PHP");
  }

   if(isset($_POST["submit"])){
   $aa=$_POST['text1'];

   array_push( $_SESSION["abc"],$aa);
   echo "hello";
    foreach( $_SESSION["abc"] as $key=>$val)
    { 

        echo $val;
    }
  }

?>