将先前的会话值和后续的会话值存储在数组中

时间:2018-08-14 06:05:21

标签: php x-cart

嘿,我有一个购物车系统,我正在尝试存储添加到购物车中的每种产品的每个会话值。不幸的是,我似乎无法将所有先前的会话值存储到数组,而仅存储当前的会话值。每次调用新会话都会破坏阵列吗?

这是我的会话代码:

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);
}

1 个答案:

答案 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;