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

unset() 関数とともに array_key_exists を使用する

于 2012-11-09T19:42:39.513 に答える