0

这是数组:

 [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 的密钥匹配的所有其他项目。

有没有一种简单的方法可以做到这一点,我似乎无法想出一个?

4

3 回答 3

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]);
}
于 2012-11-09T19:41:38.853 回答
2
foreach($yourArray['ProductId'] as $key => $value) {
    if ($value == $productIdToRemove) {
        foreach($yourArray as $deleteKey => $deleteValue) {
            unset($yourArray[$deleteKey][$key]);
        }
        break;
    }
}
于 2012-11-09T19:40:51.783 回答
0

将 array_key_exists 与 unset() 函数一起使用

于 2012-11-09T19:42:39.513 回答