Php 更新会话数组的节点+;zf2

Php 更新会话数组的节点+;zf2,php,session,zend-framework2,Php,Session,Zend Framework2,首先,我添加了一个会话,然后我打印了我的会话。它看起来完全正常 Array ( [14] => Array//(main key is my restaurant Id) ( [retaurantDetail] => Array ( [restId] => 14 [restaurantName] => Barca [publish

首先,我添加了一个会话,然后我打印了我的会话。它看起来完全正常

Array
(
[14] => Array//(main key is my restaurant Id)
    (
        [retaurantDetail] => Array
            (
                [restId] => 14
                [restaurantName] => Barca
                [published] => 1
                [timings] => 10 to 10
                [normalCost] => 150
                [logo] => 44f7afcffb0aeea5c69ccee9041cab84.jpg
                [email] => barca@barca.com
                [phone] => 741258
            )

        [menuArray] => Array
            (
                [70] => Array // (menu ID is the Key)
                    (
                        [menuId] => 70
                        [productId] => 35
                        [productName] => Coca Cola
                        [categoryTitle] => Beverages
                        [categoryId] => 52
                        [price] => 100
                        [attributeName] => 1.5L
                        [isDefault] => 1
                        [qty] => 1
                    )

            )

    )
)
现在,我添加了一些逻辑,如果有人在“添加到购物车”中再次添加该菜单,简而言之,他/她在该菜单中添加了1个数量,这是我的代码,(代码尚未完成,但现在我只关注更新数量)

foreach($session->cartSession作为$sessionKey=>$sessionVal)
{
foreach($sessionVal['menuArray']作为$sessionMenuKey=>$sessionMenuVal)
{
if($sessionMenuKey==$post_data['menuId']))
{
echo“”;print_r($sessionMenuVal['qty']);echo“”;
// Somewhere on top, use this for your loops
$cartSession = $session->offsetGet('cartSession'); 

// Inside your matched loop
$currentQty = $sessionMenuVal['qty'];
$cartSession[$sessionKey][$sessionMenuKey]['qty'] = ++$currentQty;

// After your loops at the end
$session->offsetSet('cartSession', $cartSession);
//$qty=$session->cartSession[$restaurantDetail['restId']['menuArray'][$sessionMenuKey]; $sessionMenuVal['qty']=$sessionMenuVal['qty']+1; echo“”;print_r($sessionMenuVal['qty']);echo“”;
// Somewhere on top, use this for your loops
$cartSession = $session->offsetGet('cartSession'); 

// Inside your matched loop
$currentQty = $sessionMenuVal['qty'];
$cartSession[$sessionKey][$sessionMenuKey]['qty'] = ++$currentQty;

// After your loops at the end
$session->offsetSet('cartSession', $cartSession);
} } }
我缺少的是我想更新会话数量


每次我按add时,它显示1个数量,然后我再加上1个数量,然后它显示2,然后它再次显示1个数量:(。

您永远不会回写到会话中

如果我正确理解了您的代码,那么以下操作应该可以正常工作。请检查代码的正确数组嵌套,以防它无法正常工作


为了提高可读性,请在您的确认中使用否定,即不要(if(if)(if)),而是执行if(!cond){return;}if(!cond2)return;我理解@sam ok我正在删除if:)@Sam我编辑了我的代码,请检查一下,让我知道我应该怎么做?我已经尝试过这种方法,但每次循环后,当我再次打印此会话时,此打印再次显示仅1个数量:)我想我必须使用$session->offsetSet方法,我不知道如何使用此方法:(请参阅更新,进一步检查Zend\session的源;)