在$ _SESSION中添加数组

Nig*_*awk 2 php arrays session

我有一个调查脚本,每页有3个问题.当用户回答第一页上的问题并单击下一步时,$_SESSION['survey']['data']通过执行以下操作存储上一页中的数据:

$data = postToArray($_POST, $ignore_fields);
$_SESSION['survey']['data'] = $data;
Run Code Online (Sandbox Code Playgroud)

$data 是一个看起来像这样的数组:

array('question' => 'answer', 'question' => 'answer');
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

Dir*_*irk 5

尝试在将数据保存到会话变量之前序列化数据.

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