2010-11-08 191 views
13

是否可以在不知道索引的情況下從PHP數組中刪除字符串(請參閱下面的示例)?從PHP數組中刪除字符串?

實施例:

array = array("string1", "string2", "string3", "string4", "string5"); 

我需要刪除STRING3。

回答

23
$index = array_search('string3',$array); 
if($index !== FALSE){ 
    unset($array[$index]); 
} 

,如果你認爲你的價值會在那裏不止一次嘗試使用array_keys與搜索值獲取所有的索引。你可能會想確保

編輯:

注意,該指標使用unset時保持不變。如果這是一個問題,有一個很好的答案here,顯示如何使用array_splice來做到這一點。

+0

我喜歡這個+1給你。但是,如何確認它已被刪除(在屏幕上顯示)? – 2010-11-08 01:38:42

+0

查看php函數print_r和var_dump。您可以使用它們來轉儲數組的內容。 – GWW 2010-11-08 01:39:44

+0

請注意,使用unset()將保持索引不變:http://sackoverflow.com/a/369761/176140 – schellmax 2013-07-24 14:15:47

1

它的類型取決於數組可能有多大,並且有多個選項。如Jorge所發佈的,array_diff可能是最快一致的解決方案。

稍微大套的另一個解決方案:

$data = array_flip($data); 
unset($data[$item2remove]); 
$data = array_flip($data); 

但是,如果你沒有重複的項目,這只是良好。根據你的工作量,保證物品的獨特性也許是有利的。

4

你可以這樣做。

$arr = array("string1", "string2", "string3", "string4", "string5"); 
$new_arr=array(); 
foreach($arr as $value) 
{ 
    if($value=="string3") 
    { 
     continue; 
    } 
    else 
    { 
     $new_arr[]=$value; 
    }  
} 
print_r($new_arr); 
3

使用array_searcharray_splice的組合。

function array_remove(&$array, $item){ 
    $index = array_search($item, $array); 
    if($index === false) 
    return false; 
    array_splice($array, $index, 1); 
    return true; 
} 
2

這可能不是最快的方法,但它的代碼短而整齊的一行:

$array = array_diff($array, array("string3")) 

,或者如果你正在使用PHP> 5.4.0或更高版本:

$array = array_diff($array, ["string3"]) 
+1

我bench-marked你的GWW的方法在for循環運行250萬次。你的完成在18秒(17秒,當我沒有使用變量),而GWW的在16秒內完成。所以'array_diff'處理數組而不是單個字符串會更慢,從而導致開銷。 如果只有像'array_diff'這樣的函數,但用於刪除數組中的單個字符串。 – FluorescentGreen5 2017-03-12 07:19:55