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

Php 是否可以使用特定的变量索引取消设置会话变量?,php,session,Php,Session,假设我有一个特定的会话变量,$\u session['cart.'$itemid] 是否可以对所有会话变量进行排序,并使用索引“”cart.'$itemid”找到once并取消设置它们?当然可以。你可以这样做 foreach ($_SESSION as $key=>$val) { // Look for "cart_" at the front of the array key if (strpos($key, "cart_") === 0) { unset($_SESSI

假设我有一个特定的会话变量,
$\u session['cart.'$itemid]


是否可以对所有会话变量进行排序,并使用索引“
”cart.'$itemid”找到once并取消设置它们?

当然可以。你可以这样做

foreach ($_SESSION as $key=>$val) {
  // Look for "cart_" at the front of the array key
  if (strpos($key, "cart_") === 0) {
    unset($_SESSION[$key]);
  }
}
或者使用
array\u keys()
执行相同的操作:

附录

不过,如果我可以提出一个设计建议,如果您能够更改此结构,我建议您将这些购物车项目存储为一个数组。然后,数组将包含在其中的项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    
}

当然。你可以这样做

foreach ($_SESSION as $key=>$val) {
  // Look for "cart_" at the front of the array key
  if (strpos($key, "cart_") === 0) {
    unset($_SESSION[$key]);
  }
}
或者使用
array\u keys()
执行相同的操作:

附录

不过,如果我可以提出一个设计建议,如果您能够更改此结构,我建议您将这些购物车项目存储为一个数组。然后,数组将包含在其中的项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    
}

除非更改$itemId的内容,否则$SESSION['cart'.$itemId]中只存储一个项目

无论如何,请确定您可以取消设置:

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

除非更改$itemId的内容,否则$SESSION['cart'.$itemId]中只存储一个项目

无论如何,请确定您可以取消设置:

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

也许你应该使用===而不是==不起作用。需要将
==
与strpo一起使用。手册页上有一个关于这个的链接!更安全的是,您不需要删除一个名为“cart\u type”的变量,将来可能会使用它,您可以使用下划线进行分解,如果结果有两个元素,第一个元素是“cart”,第二个元素是int值,那么您可以删除它it@mishu==固定。早上太早了。脚本工作…“暂时”。当我按“清除”按钮时,它显示为空白,这是我的目标,但当我按“添加”时,数组的前一个内容出现。顺便说一句,如果我要在会话数组中存储3 2个变量会怎么样?目前,我使用它们的方式如下$\u会话['cart.'$itemid]=$itemqty。我还忘了$itemid是一个变量,所以可能有很多不同的变量。如果发布整个脚本会有帮助,请提问。也许您应该使用===而不是==将不起作用。需要将
==
与strpo一起使用。手册页上有一个关于这个的链接!更安全的是,您不需要删除一个名为“cart\u type”的变量,将来可能会使用它,您可以使用下划线进行分解,如果结果有两个元素,第一个元素是“cart”,第二个元素是int值,那么您可以删除它it@mishu==固定。早上太早了。脚本工作…“暂时”。当我按“清除”按钮时,它显示为空白,这是我的目标,但当我按“添加”时,数组的前一个内容出现。顺便说一句,如果我要在会话数组中存储3 2个变量会怎么样?目前,我使用它们的方式如下$\u会话['cart.'$itemid]=$itemqty。我还忘了$itemid是一个变量,所以可能有很多不同的变量。如果发布整个脚本会有帮助的话,只需提问即可,$itemid确实是一个变量。对不起,我忘了发那个。我的目标是删除所有会话变量,其索引从“购物车”开始。$itemid可以是任何字母数字值,$itemid实际上是一个变量。对不起,我忘了发那个。我的目标是删除所有会话变量,其索引从“购物车”开始。$itemid可以是任何字母数字值;它工作得很好!请问你的剧本是做什么的?它与使用strpos($key,“cart”===0或$getcartname=(explode(“'ui',$key))有什么区别;如果($getcartname[0]=='cart');preg_grep将正则表达式应用于数组的每个成员(本例中为$会话的键),并将任何匹配元素返回到新数组中。因此,
$matches
将包含会话中所有的
cart\u XXX
关键字名。然后是一个简单的循环来取消设置每个会话变量;它工作得很好!请问你的剧本是做什么的?它与使用strpos($key,“cart”===0或$getcartname=(explode(“'ui',$key))有什么区别;如果($getcartname[0]=='cart');preg_grep将正则表达式应用于数组的每个成员(本例中为$会话的键),并将任何匹配元素返回到新数组中。因此,
$matches
将包含会话中所有的
cart\u XXX
关键字名。然后使用一个简单的循环来取消设置这些会话变量中的每一个。