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',
),
),
),
答案 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
)
)
)
)
答案 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