2009-08-17 49 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]); 
    }