如何在PHP中从数组中删除值?

18

是否有一个PHP函数可以从数组中删除特定的元素?

例如,我有一个带有值的数组(A),还有另一个数组(B)需要删除值。

想要从数组B中删除数组A中的值吗?


虽然在2009年非常普遍,但这个问题并不是一个好的重复目标,因为它对其要求模糊,并且缺少[mcve]。 - mickmackusa
6个回答

33
使用array_diff()函数。
$new_array = array_diff($arrayB, $arrayA);

将返回一个包含所有不在$arrayA中的元素的数组。
要使用关联数组执行此操作,请使用array_diff_assoc()
要删除单个值,请使用:
unset($array[$key]);

当然你可以循环来实现数组函数的等效操作,但这没有意义。

5

这取决于你所说的“删除”是什么意思。

您可以使用unset()函数从数组中删除键,但这不会重新索引它。例如,如果你有:

$a = array(1 => 'one', 2 => 'two', 3 => 'three');

然后您调用

unset($a[2]);

你最终会得到类似于以下的东西:
(1 => 'one', 3 => 'three');

如果您需要数组按顺序编号,可以将未设定键名的数组传入array_values()函数,它会返回一个新数组并按顺序编号。
回到您最初的情景,正如其他人所观察到的,array_diff函数可以为您完成工作,但请注意它不会进行索引检查。如果您需要进行索引检查,请改用array_diff_assoc函数。

2
array_diff 函数可以帮你实现这个功能。

1
也许一个简单且更快的解决方案是这样的。一个简单的重述可以在数组中删除(取消设置)多个值。
    // Your array
    $list = array("apple", "orange", "strawberry", "lemon", "banana");

    // Initilize what to delete
    $delete_val = array("orange", "lemon", "banana");

    // Search for the array key and unset   
    foreach($delete_val as $key){
        $keyToDelete = array_search($key, $list);
        unset($list[$keyToDelete]);
    }

1
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);

print_r($result);

1
我在寻找从数组中删除单个值的方法时遇到了这篇文章(正如标题所述)。以下是一种直接的方法,假设要删除的值已经在数组中:
$list = array('foo', 'bar', 'yay', '\o/');
$toremove = 'foo';
unset($list[array_search($toremove, $list)]);

虽然这会在要移除的元素不在数组中时引发错误。

另一种解决方案,但从性能上来说并不是最优化的是:

$list = array('foo', 'bar', 'yay', '\o/');
$toremove = 'foo';
$list = array_flip($list);
unset($list[$toremove]);
$list = array_flip($list);

无论如何,也许按照这里每个人建议的使用array_diff创建一个只包含单个值的数组会更快、更高效。

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