根据其中一个值取消设置多维数组中的值

Unset a value in a multi-dimensional array based on one of the values

我正在尝试根据找到其中一个值(产品代码)取消多维数组中的一行

这里是稍微简化的 structure/content 数组:

Array ([0] => Array ( [item_id] => code1 [item_desc] => first product  [item_price] => 5.45 )
[1] => Array ( [item_id] => code2 [item_desc] => second product  [item_price] => 9.25 ))

除了尝试删除数组中的第一项 [0] 时,以下工作正常 - 因此无法删除购物篮中的第一项。

$pid = 'code2';

$key = array_search($pid, array_column($_SESSION['cart_array'], 'item_id'));

if($key) {
    unset($_SESSION['cart_array'][$key]);
    sort($_SESSION["cart_array"]);
    }

其中$pid的值='code1',$key的值returnsfalse,session变量内容不变

我试过使用 foreach 循环,它会找到值,但我似乎无法返回到密钥

foreach ($_SESSION['cart_array'] as $search)
    {
        if($pid == $search['item_id'])
        {
        echo key($search);            // returns item_id
        }
    }

非常感谢任何帮助。

我想这就是你想要的。

foreach ($_SESSION['cart_array'] as $key => $search)
{
    if($pid == $search['item_id'])
    {
        echo $key;
    }
}

当使用 array_search() 的 return 值时,第一项可能 return 0(如您所知),当您测试 0 时 - 这与 false 相同, 需要检查key不等同于false...

if($key !== false) {

使用更简单的方法:

$_SESSION['cart_array'] = array_filter($_SESSION['cart_array'], function ($item) use ($pid) {
    return $item['item_id'] != $pid;
});

filters 数组中匹配 $pid 的所有项目。