嘿,我有一个购物车系统,我正在尝试存储添加到购物车中的每种产品的每个会话值。不幸的是,我似乎无法将所有先前的会话值存储到数组,而仅存储当前的会话值。每次调用新会话都会破坏阵列吗?
这是我的会话代码:
public function handleRequest()
{
$sessionValue = $this->getCurrentProductId();
if(!empty($sessionValue))
{
(int) \Xlite\Core\Session::getInstance()->session_value = $sessionValue;
}
// var_dump((int) \Xlite\Core\Session::getInstance()->session_value);
parent::handleRequest();
}
public function getSessionValue()
{
$id = array();
$count = array();
$id = \Xlite\Core\Session::getInstance()->id;
$count = (int)\Xlite\Core\Session::getInstance()->session_value;
$arr=[
"id" => $id,
"Item_id" => $count
];
//array_push($arr);
\Xlite\Core\Session::getInstance()->id = $id + 1;
(int)\Xlite\Core\Session::getInstance()->session_value = $count;
return json_encode($arr);
}
答案 0 :(得分:1)
您每次执行此操作都会创建一个新数组
$id = array();
$count = array();
然后您不将值推入数组,而是使用以下方法为它分配单个值来销毁它:
$id = \Xlite\Core\Session::getInstance()->id;
$count = (int)\Xlite\Core\Session::getInstance()->session_value;
最后,您使用一个无处不在的空数组来存储您的值,如下所示:
$arr=[
"id" => $id,
"Item_id" => $count
];
,您甚至尝试将其自身推入阵列:
//array_push($arr);
如果您取消注释该行,因为$ arr不存在,它将引发错误 最后,您进行一些分配并返回$ arr,其中将仅包含新的会话数据
\Xlite\Core\Session::getInstance()->id = $id + 1;
(int)\Xlite\Core\Session::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;