2009-08-17 60 views
17

是否有PHP函数可以从数组中删除某些数组元素?例如,我有一个数组(A)和另一个数组(B),从这个数组中需要删除值。如何从PHP中的数组中删除值?

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

+0

我忍不住,但我一直想知道同样的事情+1在这个问题上 – JasonDavis 2009-08-17 14:12:30

回答

31

使用array_diff()

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

将所有元素从$arrayB$arrayA返回数组。

要做到这一点与关联数组使用array_diff_assoc()

要删除单个值使用:

unset($array[$key]); 

当然你也可以循环,这样做的阵列功能等同,但有没有点在中。

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

print_r($result); 
5

这取决于你的意思是“删除”。

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

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

,你再调用

unset($a[2]); 

你的东西落得像

(1 => 'one', 3 => 'three'); 

如果您需要数组顺序索引,你可以取出未设置的数组并将其馈入array_values(),这将返回一个具有顺序索引键的新数组。

回到您的原始场景,正如其他人所看到的,array_diff将为您完成这项工作,但请注意,它不会执行索引检查。如果你需要这个,请改用array_diff_assoc。

1

我来accros这篇文章寻找一种方法来从数组中删除一个单一的值(标题说明)。这里是一个直接的方式,假设值,除去在数组中:

$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受到大家的建议这里是更快,更高效。

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]); 
    }