在PHP会话中存储对象数组

时间:2014-01-25 10:12:21

标签: php session session-variables

如何在PHP会话中存储/删除/获取对象数组?

我尝试添加以下内容:

array_push($_SESSION['cart'], serialize($item));    

这用于删除:

function removeitem ($item)
{
    $arrayCart = $_SESSION['cart'] ;
    for ($i=0; $i<$arrayCart.length; $++ )
    {
        if ($item.id == $arrayCart[i].id)
            $arrayCart.splice (i,0); 
    }
}

但它不起作用!!

4 个答案:

答案 0 :(得分:1)

<?php
session_start();

$_SESSION['cart']=array();

$_SESSION['cart']['username'] = 'Admin';
$_SESSION['cart']['Password'] = '123';
.
.
.
?>


删除

    <?php
    session_start();

    $_SESSION['cart']=array();

   unset ( $_SESSION['cart']['username'] );
    .
    .

or use Custom Function to Remove...
    .
    ?>

这对我有用...
如果此代码报告错误请评论检查此...
请检查PHP版本

答案 1 :(得分:0)

您是否尝试过使用此功能?

if(!isset($_SESSION['cart'])){
  $_SESSION['cart'] = [];
}
$_SESSION['cart'][] = $item;

您不需要序列化项目变量 - 会话可以存储纯对象,只要最大值。会话大小不超过。

如果您想从购物车中删除商品,则应使用索引名称 - 这样您就可以更快地找到商品。

我可能会使用这样的东西:

if(!isset($_SESSION['cart'])){
  $_SESSION['cart'] = [];
}

function addItem($itemName){
    if(!isset($_SESSION['cart'][$itemName])) {
        $_SESSION['cart'][$itemName] = 1;
    }else
        $_SESSION['cart'][$itemName] ++;
    }
}
function removeItem($itemName){
    if(isset($_SESSION['cart'][$itemName])) {
        if($_SESSION['cart'][$itemName] > 0) {
            $_SESSION['cart'][$itemName] --;
        }
    }
}

function clearCart(){
   unset($_SESSION['cart']);
}

在这种情况下,购物车会存储每件商品及其金额。您也可以使用数据库中的item-ID而不是$itemName

要从购物车中获取商品,您需要此功能:

function getItemCount($itemName){
    if(isset($_SESSION['cart'][$itemName])) {
        return $_SESSION['cart'][$itemName];
    }
    return 0;
}

答案 2 :(得分:0)

尽量不要推送到数组,因为它可能尚未设置,但要存储到会话,请创建新的会话var:

$_SESSION['cart']=serialize($item);

删除它:

unset($_SESSION['cart']);

编辑:

感谢评论,我意识到上面的代码不会在会话中存储数组。所以,另一个简短的解决方案是将session var存储到一些JSON中。试试这个进行简短的测试:

$tmp = array(1,2,3);
$_SESSION['cart']=json_encode($tmp);
print_r(json_decode($_SESSION['cart']));

如果该数组是关联的,那么你应该用于解码:

json_decode($_SESSION['cart'], true);

答案 3 :(得分:0)

没有人看到这个:

for ($i=0; $i<$arrayCart.length; $++ ){ //  <-----  lol @ $++

将其设为$i++

您还需要另外2 }来关闭if()for()语句,这样就可以了:

function removeitem ($item){
    $arrayCart = $_SESSION['cart'] ;
    for ($i=0; $i<$arrayCart.length; $++ ){
        if ($item.id == $arrayCart[i].id){
            $arrayCart.splice (i,0); 
        }
    }
}