从多维数组php中删除项目

时间:2012-11-09 19:37:02

标签: php

这是数组:

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

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

3 个答案:

答案 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()函数一起使用

相关问题