php unset session cart array

时间:2014-03-02 12:08:18

标签: php arrays session

    Array ( 
   [0] => Array ( 
      [0] => Array ( 
         [subject] => Computer [price] => 33.00
         [quantity] => 1 
         [total] => 33
         [level] => Array (
            [CSA] => 1
            [CSB] => 2
         )
      )
   )
   [1] => Array (
      [0] => Array (
         [subject] => English
         [price] => 33.00
         [quantity] => 25
         [total] => 825
         [level] => Array (
            [Eintro] => 1
            [EA] =>
            [EB] => 1
         )
      )
   )

我有一个如上所述的会话购物车阵列。如何删除与“计算机”相关的项目,即主题计算机以及与主题计算机相关的价格,数量,总数和级别。

我知道我必须使用未设置的SESSION。但是如何仅为计算机行取消设置会话数组,以便它不会影响购物车中的其他项目数组?

var_export($session_cart);

array ( 
   0 => array ( 
      0 => array ( 
         'subject' => 'Computer', 
         'price' => '33.00',
         'quantity' => 1,
         'total' => 33, 
         'level' => array ( 
            'CSA' => '1', 
            'CSB' => '2',
         ),
      ),
   ), 
   1 => array ( 
      0 => array ( 
         'subject' => 'English',
         'price' => '33.00',
         'quantity' => 25,
         'total' => 825,
         'level' => array (
            'EA' => '1',
            'EB' => '1',
         ), 
      ), 
   ),

3 个答案:

答案 0 :(得分:1)

您应该循环浏览购物车会话:

for ($i = 0; $i < count($_SESSION['cart']); $i++)
{
   if($_SESSION['cart'][$i]['subject'] == 'computer')
   {
      unset($_SESSION['cart'][$i]);
   }
}

请注意,我假设您已将所有购物车的商品和价值放在一个$_SESSION['cart']中。如果没有,则删除购物车并使用$_SESSION[$i](虽然看起来很奇怪)。

答案 1 :(得分:0)

当您删除带有要删除的数组和项目的项目调用removeItem()时,它将返回已修改的数组。

尝试这样:

  function removeItem($arr,$item) {
   for($i=0;$i < count($arr);$i++){
    foreach($arr[$i] as $b){
     if(in_array($item,$b)){
      unset($arr[$i]);
     }
    }
    }
    return $arr;
   }
   $arr =  removeItem($arr,"English");
   print_r($arr);
   $_SESSION['cart'] =  $arr;

输出: 当我将英语作为$item输出时输出:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [subject] => Computer
                    [price] => 33.00
                    [quantity] => 1
                    [total] => 33
                    [level] => Array
                        (
                            [CSA] => 1
                            [CSB] => 2
                        )

                )

        )

)

demo

答案 2 :(得分:0)

这是一个可以在多数组中搜索并在找到值时执行回调函数的函数:

    function extend_array_search($needle,&$haystack,$callback = '') {
    $array_res = array();
    foreach ($haystack as $key => $value) {
        $res = null;
        if(is_array($value)) {
            $res = extend_array_search($needle,$value);
        } else {
            if($value == $needle) {
                $res = $key;
            } 
        }
        if($res != null) $array_res[$key] = $res;

    }
    if(!empty($callback)) {
        $array_res = $callback($array_res,&$haystack);
    }
    if($array_res != null) {
        return $array_res;
    }
}

function unset_array_key($key_to_unset, $array_to_modify) {
    if(is_array($key_to_unset)) {
        foreach ($key_to_unset as $key => $value) {
            unset($array_to_modify[$key]);
        }
    } else {
        unset($array_to_modify[$key_to_unset]);
    }
}



extend_array_search('Computer',$session_cart) // return the keys containing computer OR
 extend_array_search('Computer', $session_cart,'unset_array_key'); // unset the value in $session_cart