从PHP数组中删除字符串?

23

不知道数组索引的情况下,是否有可能从PHP数组中删除一个字符串(请参见以下示例)?

示例:

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

我需要移除string3。

6个回答

44
$index = array_search('string3',$array);
if($index !== FALSE){
    unset($array[$index]);
}
如果你认为你的值会在数组中出现多次,尝试使用array_keys和搜索值一起获取所有的索引。你可能想要确保
编辑:
注意,使用unset时索引保持不变。如果这是一个问题,可以查看 这里 的一个不错的答案,该答案显示如何使用array_splice来解决这个问题。

我喜欢这个+1给你。但是,我怎么确认它被移除了(在屏幕上显示)? - Zac Brown
请查看 PHP 函数 print_r 和 var_dump。您可以使用它们来转储数组的内容。 - GWW
注意,使用unset()将保持索引不变:https://dev59.com/pnRC5IYBdhLWcg3wOeWB#369761 - schellmax
array_valuesarray_splice更容易使用,用于清理索引。 - FluorescentGreen5
你应该使用 if($index) 而不是 if($index !== FALSE),这样看起来更干净,而且仍然有效。编辑:算了,如果要删除的字符串在索引0上,则它将无效。 - FluorescentGreen5

7
这可能不是最快的方法,但只需要一行简洁的代码即可实现:

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

如果您使用的是 PHP > 5.4.0 或更高版本:

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

4
我用一个 for 循环测试了你的方法和 GWW 的方法,循环运行了 250 万次。你的方法完成时间为 18 秒(当我不使用变量时为 17 秒),而 GWW 的方法完成时间为 16 秒。因此,由于 array_diff 处理数组而不是单个字符串,会产生额外的开销,所以速度较慢。如果有一个像 array_diff 但是用于从数组中移除单个字符串的函数就好了。 - FluorescentGreen5
2
@FluorescentGreen5 慢一些,但并不是非常慢,只有约5-10%的差异,这并不值得失眠,除非你处理数十万条记录,而且在PHP8中可能会更少。 - Tofandel

5

你可以做到这一点。

$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); 

4

使用 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;
}

3
最初的回答:你也可以尝试这样做。
$array = ["string1", "string2", "string3", "string4", "string5"];
$key = array_search('string3',$array);
unset($array[$key]);

1

这有点取决于数组的大小,有多种选择。

如果数组通常很小,array_diff可能是最快的一致解决方案,就像Jorge发布的那样。

稍大一点集合的另一种解决方案:

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

但仅当您没有重复项时,这才是好的。根据您的工作负载,确保项目的唯一性可能是有利的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接