从多维数组中删除数组键 PHP

10

我有这个数组

 $cart= Array(
      [0] => Array([id] => 15[price] => 400)
      [1] => Array([id] => 12[price] => 400)
    )
我需要的是根据某个值删除数组键,就像这样。
$value = 15;

值为15只是一个例子,我需要检查数组并删除如果该值存在于ID中?

3个回答

15

array_filter函数适用于从数组中移除不需要的元素。

$cart = array_filter($cart, function($x) { return $x['id'] != 15; });

如果你想使用一个变量来确定要删除哪个id,而不是将其包含在array_filter回调中,你可以在函数中像这样使用你的变量:

如果您想使用变量来确定要删除哪个id,而不是将其包含在array_filter回调函数中,您可以在函数中像这样使用您的变量:

$value = 15;
$cart = array_filter($cart, function($x) use ($value) { return $x['id'] != $value; });

3
这个答案应该被接受。没有人想为一个单一的任务使用循环。 - Poonam

11

PHP 中有许多奇怪的数组函数,但其中许多请求可以通过非常简单的 foreach 循环解决...

$value = 15;
foreach ($cart as $i => $v) {
    if ($v['id'] == $value) {
        unset($cart[$i]);
    }
}

如果$value根本不在数组中,将不会发生任何事情。 如果$ value在数组中,则整个索引将被删除(unset)。


3
如果将 $a 替换为 $cart 让你感到困惑,那么这可能更难理解了。 - kainaw

1
你可以使用:

foreach($array as $key => $item) {
  if ($item['id'] === $value) {
    unset($array[$key]);
  }
}

我不使用引用来完成这个操作,因为我知道我会在后面使用$item变量,并且花费很长时间才能意识到$item是指向$array中最后一个元素的引用。 - kainaw
这是行不通的,因为 unset($item) 并不会删除数组元素,它只是取消对它的引用。 - Don't Panic
如果您创建了 function clearArray($value){ ... },则不需要再使用 $item,顺便说一下,我认为更好的解决方案是使用 PHP 中的 array_filter 函数。 - dwaskowski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接