根据Laravel中的键控值删除数组中的数组

时间:2014-11-29 18:46:28

标签: php arrays laravel laravel-4

我正在尝试使用Laravel整合购物车系统。

以下是添加内容的方式:

public function addItem($itemId, $details = []) {
    if(isset(Session::get('cart'))) {
        Session::push('cart', ['item_id' => $itemId, 'details' => $details]);
    } else {
        Session::put('cart', ['item_id' => $itemId, 'details' => $details]);
    }
}

我知道如何从购物车中删除所有内容,这很简单:

if(isset(Session::get('cart'))) {
    Session::forget('cart');
}

但我不知道如何根据item_id从购物车中删除特定商品,目前我对此功能的所有内容都是:

public function removeItem($itemId) {
    if(isset(Session::get('cart'))) {

    } else {

    }
}

如何根据子数组中的键item_id在购物车中取消设置和项目?

3 个答案:

答案 0 :(得分:1)

Session外观具有forget()功能,可让您从会话中删除项目。很酷的是,它内部调用array_forget,允许你使用“点”表示法。所以你就是这样做的:

$index = null;
// find out the index of the item to delete
foreach(Session::get('cart') as $i => $item){
    if($item['item_id'] == $itemId){
        $index = $i;
        break;
    }
}
// remove by index using the dot notation
if($index != null){
    Session::forget('cart.'.$index);
}

此外,您可以使用item_id作为实际数组键来简化操作。这应该有效:

public function addItem($itemId, $details = []) {
    Session::set('cart.'.$itemId, ['item_id' => $itemId, 'details' => $details]);
}

public function removeItem($itemId) {
    Session::forget('cart.'.$itemId);
}

答案 1 :(得分:0)

据我所知,目前没有办法删除存储在会话中的数组的值,但你可以尝试workaraound - 从会话加载所有数组,删除数组值并将数组设置回会话。这样的事情应该有效:

public function removeItem($itemId) {
    if(isset(Session::get('cart'))) {
        $cart = Session::get('cart');
        unset($cart[$item_id]);
        Session::set('cart', $cart);
    } else {

    }
}

答案 2 :(得分:-1)

您可以使用array_forget函数删除嵌套数组,但可以使用array_except删除部件,如下所示:

$array = array_except($array, array('keys', 'to', 'remove'));

在你的情况下使用:

Session::array_except('cart', ['item_id', $itemId, 'remove']);

有关详细信息,请访问此链接http://laravel.com/docs/4.2/helpers