是否有PHP函数从数组中删除某些数组元素?
例如,我有一个数组(A
)包含值和另一个数组(B
),需要从中删除值。
想要从数组A
删除数组B
中的值吗?
答案 0 :(得分:32)
$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]);
}