2010-08-28 72 views
7

我有一个数组可能有重复的值删除项目的所有实例从阵列

$array1 = [value19, value16, value17, value16, value16] 

我在寻找一个有效的小PHP函数,可以接受数组或一个字符串(无论使得它更容易)

$array2 = ["value1", "value16", "value17"]; 
or 
$string2 = "value1 value16 value17"; 

并删除array1中的每个项目或array1中的string2。

这个例子的右输出将是:

$array1 = [value19] 

对于那些更有经验,使用PHP,是这样的,可以在PHP?

回答

10

你正在寻找array_diff

$array1 = array('19','16','17','16','16'); 
$array2 = array('1','16','17'); 
print_r(array_diff($array1,$array2)); 

阵列([0] => 19)

+0

我认为问题与和array_diff是如果array1中的值不存在于array1中,它实际上会被添加,因为它正在做一个diff。在上面的数组中,array2包含value1,但array1甚至没有value1,所以它不能被删除,因为它不存在。 – Lingo 2010-08-28 06:14:12

+0

你错了,array_diff不会添加任何东西。试试看。 – Galen 2010-08-28 06:27:31

0

对于字符串版本一起使用,使用爆炸。 像这样:

function arraySubtract($one, $two) { 
    // If string => convert to array 
    $two = (is_string($two))? explode(' ',$two) : $two; 
    $res = array(); 
    foreach (array_diff($one, $two) as $key => $val) { 
     array_push($res, $val); 
    } 

    return $res; 
} 

这allso返回与key = 0的数组.... n,其中没有间隙

测试与此:

echo '<pre>'; 
print_r(arraySubtract(array(1,2,3,4,5,6,7), array(1,3,7))); 
print_r(arraySubtract(array(1,2,3,4,5,6,7), "1 3 7")); 
print_r(arraySubtract(array("val1","val2","val3","val4","val5","val6"), array("val1","val3","val6"))); 
print_r(arraySubtract(array("val1","val2","val3","val4","val5","val6"), "val1 val3 val6")); 
echo '</pre>';