如何在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);
}
}
但它不起作用!!
答案 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);
}
}
}