是否可以使用特定和可变索引取消设置会话变量?

时间:2011-09-30 13:14:30

标签: php session

假设我有这个特定的会话变量$_SESSION['cart_'.$itemid]

是否可以对会话变量进行排序并找到带索引'cart_'.$itemid的一次并取消设置?

3 个答案:

答案 0 :(得分:7)

不确定。你可以做点什么

foreach ($_SESSION as $key=>$val) {
  // Look for "cart_" at the front of the array key
  if (strpos($key, "cart_") === 0) {
    unset($_SESSION[$key]);
  }
}

或使用array_keys()同样的事情:

foreach (array_keys($_SESSION) as $key) { 
  // Look for "cart_" at the front of the array key
  if (strpos($key, "cart_") === 0) {
    unset($_SESSION[$key]);
  }
}

附录

如果我可以提出设计建议,如果你有能力改变这种结构,我建议将这些购物车项目存储为数组。然后,数组将项目ID包含在其中作为值。

// Updated after comments....
$_SESSION['cart'] = array();
// Add to cart like this:
$_SESSION['cart'][$itemId] = $new_quantity;

这样可以更容易地执行以下操作:

foreach ($_SESSION['cart'] as $item=>$quantity) {
  // process the cart    
}

答案 1 :(得分:2)

$matches = preg_grep('/^cart_/', array_keys($_SESSION));
foreach ($matches as $match) {
    unset($_SESSION[$match]);
}

答案 2 :(得分:1)

只有一个项目存储在$ SESSION ['cart '中。 $ itemId]除非你改变$ itemId的内容。

无论如何,确定你可以解决这个问题:

if (isset($_SESSION['cart_' . $itemId])) { // don't need this if you are iterating through $_SESSION
  unset($_SESSION['cart_' . $itemId]);
}