这是数组:
[cart] => Array
(
[ProductId] => Array
(
[0] => P121100001
[1] => P121100002
)
[SellerId] => Array
(
[0] => S12110001
[1] => S12110001
)
[SpecifyId] => Array
(
[0] => 1
[1] => 2
)
[Quantity] => Array
(
[0] => 1
[1] => 1
)
[Price] => Array
(
[0] => 12
[1] => 29
)
[TotalPrice] => 41
)
我有ProductId,我想删除所有与P121100002密钥匹配的其他项目。
有没有一种简单的方法可以做到这一点我似乎无法想出一个?
答案 0 :(得分:3)
您可以遍历整个数组并使用unset()
来“取消”指定的索引:
$index = array_search($cart['ProductId'], 'P121100002');
if ($index !== false) {
foreach ($cart as $key => $arr) {
unset($cart[$key][$index]);
}
}
这种方法的一个小问题是,它可能会破坏你的指数订单。例如,假设你有:
[ProductId] => Array (
[0] => P121100001
[1] => P121100002
[2] => P121100003
)
并且您要删除P121100002
,其1
的索引相应。使用unset($cart['ProductId'][1])
会导致数组成为:
[ProductId] => Array (
[0] => P121100001
[2] => P121100003
)
如果您将来要使用for
循环进行迭代,这可能会引起关注。如果是,您可以使用array_values()
从上面“重置”unset()
循环中的索引:
foreach ($cart as $key => $arr) {
unset($cart[$key][$index]);
$cart[$key] = array_values($cart[$key]);
}
答案 1 :(得分:2)
foreach($yourArray['ProductId'] as $key => $value) {
if ($value == $productIdToRemove) {
foreach($yourArray as $deleteKey => $deleteValue) {
unset($yourArray[$deleteKey][$key]);
}
break;
}
}
答案 2 :(得分:0)
将array_key_exists与unset()函数一起使用