2010-11-08 88 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