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

时间:2009-08-17 14:10:32

标签: php

是否有PHP函数从数组中删除某些数组元素?

例如,我有一个数组(A)包含值和另一个数组(B),需要从中删除值。

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

6 个答案:

答案 0 :(得分:32)

使用array_diff()

$new_array = array_diff($arrayB, $arrayA);

将返回一个数组,其中$arrayB$arrayA的所有元素都在unset($array[$key]);

要使用关联数组执行此操作,请使用array_diff_assoc()

要删除单个值,请使用:

{{1}}

你当然可以循环它来做相当于数组的功能,但是没有意义。

答案 1 :(得分: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 :(得分:2)

array_diff功能会为您完成此操作。

答案 3 :(得分:1)

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

print_r($result);

答案 4 :(得分: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更快更有效。

答案 5 :(得分: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]);
    }