2010-08-28 33 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>';