php array_search可以返回多维数组或嵌套数组的内部数组的键吗?

wz3gfoph  于 2022-12-25  发布在  PHP
关注(0)|答案(1)|浏览(161)

我正在处理一个购物车项目,有一个$_SESSION ['productSummary']数组,如下所示。

[productSummary] => Array
        (
            [0] => Array
                (
                    [name] => Individual Coins
                    [code] => 8774
                    [IDs] => Array
                        (
                            [0] => 8774
                            [1] => 8775
                            [2] => 8778
                            [3] => 8765
                        )

                    [pluID] => 6105
                    [qty] => 4
                    [finalPrice] => 0.0000
                    [listPrice] => 0.0000
                    [shipping] => 0.0000
                )

            [1] => Array
                (
                    [name] => Business Package - 5,000
                    [code] => 8770
                    [IDs] => Array
                        (
                            [0] => 8770
                        )

                    [pluID] => 6087
                    [qty] => 1
                    [finalPrice] => 125.0000
                    [listPrice] => 125.0000
                    [shipping] => 0.0000
                )

        )

当用户希望从购物车中删除商品#8778时,我需要找到“8778”的索引键值,以便从ID数组中删除该值。
这是我目前为止所拥有的代码片段。我为$matchingKey获得了很好的值,但是$matchingKey2总是空的。

// Find the key for the parent array
$matchingKey = array_search(8778, array_column($_SESSION["productSummary"], 'IDs'));

// Find the key for the element in the nested IDs array
$matchingKey2 = array_search(8778, array_column($_SESSION['productSummary'][$matchingKey]['IDs']));

// If it found a match, unset that element
if(!empty($matchingKey2)) {
     unset($_SESSION["productSummary"][$matchingKey]['IDs'][$matchingKey2]);
}

// Reindex the array
$_SESSION["productSummary"][$matchingKey]['IDs'] = array_values($_SESSION["productSummary"][$matchingKey]['IDs']);

我还以为

$matchingKey2 = array_search(8778, array_column($_SESSION['productSummary'][$matchingKey]['IDs']));

在本例中返回值2,但if返回NULL

nue99wik

nue99wik1#

不能使用array_search()搜索嵌套数组。请使用普通的foreach循环。
还需要注意的是,不能使用!empty($matchingKey2)来判断是否找到了条目,如果条目是数组中的第一个元素,则$matchingKey2将为0,它被认为是空的,必须使用与false的严格比较。

foreach ($_SESSION["productSummary"] as &$product) {
    $index = array_search(8778, $product['IDs']);
    if ($index !== false) {
        array_splice($product['IDs'], $index, 1);
        break;
    }
}

相关问题