我想在会话数组中保存通过POST发送的值:
$reply = array('thread_id', 'reply_content');
$_POST['thread_id'] = 2; # test it
$_SESSION['reply'] = array();
foreach ($reply as $key)
{
if (in_array($key, $_POST))
{
$_SESSION['reply'][$key] = $_POST[$key];
}
}
var_dump($_SESSION['reply']);
例如,我想检查密钥'thread_id'和'thread_content'是否在post中发送,如果是,那么我想使用相同的密钥将它们保存在名为reply的会话数组中。
因此,例如,如果'thread_id'是通过POST发送的:
$_POST['thread_id'] = 'blah';
然后,这应该使用相同的密钥保存在名为“回复”的会话中:
$_SESSION['reply']['thread_id'] = 'blah';
如何做到这一点?
答案 0 :(得分:2)
一般情况下,您的方法看起来有效,但我猜您可能不会调用session_start()
,这是保留会话数据所必需的。
session_start();
if(!$_SESSION['POST']) $_SESSION['POST'] = array();
foreach ($_POST as $key => $value) {
$_SESSION['POST'][$key] = $value;
}
var_dump($_SESSION['POST']);
答案 1 :(得分:1)
in_array($needle, $haystack)
检查$needle
中的$haystack
是值而不是密钥。请改用array_key_exists
或isset
:
foreach ($reply as $key)
{
if (array_key_exists($key, $_POST))
{
$_SESSION['reply'][$key] = $_POST[$key];
}
}
或者:
$_SESSION['reply'] = array_merge($_SESSION['reply'], array_intersect_key($_POST, array_flip($reply)));
答案 2 :(得分:0)
使用此
$reply = array('thread_id', 'reply_content');
$_POST['thread_id'] = 2; # test it
$_SESSION['reply'] = array();
foreach ($reply as $key)
{
if (isset($_POST[$key]))
{
$_SESSION['reply'][$key] = $_POST[$key];
}
}