2012-08-29 99 views
1

有沒有更簡單的方法來做到這一點?從數組中刪除值php

$array = array(1,57,5,84,21,8,4,2,8,3,4); 
$remove = 21; 
$i = 0; 
foreach ($array as $value){ 
    if($value == $remove) 
     unset($array[$i]) 
     $i++; 
    } 

//array: 1,57,5,84,8,4,2,8,3,4 
+1

這是一種方法。你也可以使用array_splice()。請參閱:http://stackoverflow.com/questions/369602/how-to-delete-an-element-from-an-array-in-php。 – xbonez

回答

8

array_search答案很好。你也可以這樣arraydiff

$array = array(1,57,5,84,21,8,4,2,8,3,4); 
$remove = array(21); 
$result = array_diff($array, $remove); 
+1

Doh,我想到了和你一樣的答案。 – Stegrex

+0

我認爲這是最優雅的解決方案。 –

+0

它是否適用於多次出現的刪除數組? –

0

這是一個小清潔器:

foreach($array as $key => $value) { 
    if ($value == $remove) { 
     unset($array[$key]); 
     break; 
    } 
} 

UPDATE

備選地,可以將所述非匹配值到一個臨時數組,則重置原始。

$temp = array(); 

foreach($array as $key => $value) { 
    if ($value != $remove) { 
     $temp[$key] = $value; 
    } 
} 
$array = $temp; 
+0

這是假設它只存在一次。 –

+0

@火箭現在怎麼樣? – Matt

+0

這也適用:-) –

5

如果你想刪除第一發生的項目在數組中,使用array_search查找該項目的索引數組,而不是滾動您自己的循環英寸

$array = array(1,57,5,84,21,8,4,2,8,3,4); 
$remove = 21; 

$index = array_search($remove, $array); 

if (index !== false) 
    unset($array[$index]); 

要刪除所有重複,重新運行搜索/刪除,只要找到一個匹配:

while (false !== ($index = array_search($remove, $array))) { 
    unset($array[$index]); 
} 

或找到匹配值的所有鍵和刪除它們:

foreach (array_keys($array, $remove) as $key) { 
    unset($array[$key]); 
} 
+0

這是假設只在數組中的值一次。否則,你可以使用'array_keys'(使用第二個參數)。 –

+0

這將只適用於第一場比賽重複? –