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的源;)