从PHP数组中删除字符串?

Zac*_*own 17 php arrays string

是否可以在不知道索引的情况下从PHP数组中删除字符串(参见下面的示例)?

例:

array = array("string1", "string2", "string3", "string4", "string5");
Run Code Online (Sandbox Code Playgroud)

我需要删除string3.

GWW*_*GWW 30

$index = array_search('string3',$array);
if($index !== FALSE){
    unset($array[$index]);
}
Run Code Online (Sandbox Code Playgroud)

如果您认为您的值将不止一次尝试使用带有搜索值的array_keys来获取所有索引.你可能想确定一下

编辑:

请注意,使用时索引保持不变unset.如果这是一个问题,有一个很好的答案在这里展示了如何利用这个做array_splice.


Mik*_*rön 6

这可能不是最快的方法,但它是一行简短而整洁的代码:

$array = array_diff($array, array("string3"))
Run Code Online (Sandbox Code Playgroud)

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

$array = array_diff($array, ["string3"])
Run Code Online (Sandbox Code Playgroud)

  • 我在运行 250 万次的 for 循环中针对 GWW 对您的方法进行了基准测试。您在 18 秒内完成(当我不使用变量时为 17 秒),而 GWW 在 16 秒内完成。所以 `array_diff` 处理数组而不是单个字符串时速度较慢,从而导致开销。要是有一个像 `array_diff` 这样的函数,但用于删除数组中的单个字符串就好了。 (3认同)
  • @FluorescentGreen5 慢一些,但也慢不了多少,只有大约 5-10% 的差异,不值得失眠,除非你处理数十万条记录,现在在 PHP8 中可能会更少 (2认同)

ABo*_*rty 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); 
Run Code Online (Sandbox Code Playgroud)