嘿,我有一个购物车系统,我正在尝试存储添加到购物车的每个产品的每个会话值。 不幸的是,我似乎无法将所有以前的会话值存储到数组中,而只存储当前会话值。 每次调用新会话时是否都会销毁数组?
这是我会话的代码:
public function handleRequest()
{
$sessionValue = $this->getCurrentProductId();
if(!empty($sessionValue))
{
(int) XliteCoreSession::getInstance()->session_value = $sessionValue;
}
// var_dump((int) XliteCoreSession::getInstance()->session_value);
parent::handleRequest();
}
public function getSessionValue()
{
$id = array();
$count = array();
$id = XliteCoreSession::getInstance()->id;
$count = (int)XliteCoreSession::getInstance()->session_value;
$arr=[
"id" => $id,
"Item_id" => $count
];
//array_push($arr);
XliteCoreSession::getInstance()->id = $id + 1;
(int)XliteCoreSession::getInstance()->session_value = $count;
return json_encode($arr);
}
通过执行此操作为每个请求创建一个新数组
$id = array();
$count = array();
然后你不要把值推到数组,你通过给它分配一个值来破坏它:
$id = XliteCoreSession::getInstance()->id;
$count = (int)XliteCoreSession::getInstance()->session_value;
最后,你使用一个不知从何而来的空数组来存储你的值,如下所示:
$arr=[
"id" => $id,
"Item_id" => $count
];
您甚至尝试将这个数组本身推送:
//array_push($arr);
如果您取消注释此行,它将引发错误,因为$arr不存在 最后,您进行一些分配并返回$arr其中将只包含新的会话数据
XliteCoreSession::getInstance()->id = $id + 1;
(int)XliteCoreSession::getInstance()->session_value = $count;
return json_encode($arr);
显然,您每次都会构建一个新阵列。您必须使用另一种方法示例创建一个包含数据的对象或数组,对其进行序列化并将其保存在某个地方。然后,您将能够在需要时取消序列化它,推送新值,序列化它并再次存储它以供下次使用。还有一件事,我们以这种方式将新值推送到数组中:
$array[]='your value here' ;
//or
array_push($array,your value);
//or by even using
//an inexisting index
$array['notexists']=your value;