Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP删除数组中与特定字符串匹配的所有元素_Php_Arrays - Fatal编程技术网

使用PHP删除数组中与特定字符串匹配的所有元素

使用PHP删除数组中与特定字符串匹配的所有元素,php,arrays,Php,Arrays,我希望这真的很简单,我错过了一些明显的东西 我试图删除数组中与某个字符串匹配的所有元素。这是一个基本的一维数组 array("Value1", "Value2", "Value3", "Remove", "Remove"); 我想和你在一起 array("Value1", "Value2", "Value3"); 为什么array_过滤器($array,“Remove”)不工作 谢谢。您需要回拨电话 array_filter($array, function($e){ return s

我希望这真的很简单,我错过了一些明显的东西

我试图删除数组中与某个字符串匹配的所有元素。这是一个基本的一维数组

array("Value1", "Value2", "Value3", "Remove", "Remove");
我想和你在一起

array("Value1", "Value2", "Value3");
为什么
array_过滤器($array,“Remove”)不工作


谢谢。

您需要回拨电话

array_filter($array, function($e){
   return stripos("Remove", $e)===false
});
要正确理解上述代码,请参阅此注释代码

array_filter($array, function($e){
    if(stripos("Remove", $e)===false) // "Remove" is not found
        return true; // true to keep it.
    else
        return false; // false to filter it. 
});
如果是一个固定字符串,您可以在此处使用:

$array = array_diff($array, array("Remove"));
对于更复杂的匹配,我显然会使用:

$array = preg_grep("/^Remove$/i", $array, PREG_GREP_INVERT);
// matches upper and lowercase for example

因为你用错了。参见示例。它接受回调<代码>数组过滤器($array,function($a){return$a!==“Remove”})我理解示例使用函数,但我不理解它们返回的是什么?没有一种简单的方法可以不构建处理函数就完成它吗?@CraigWilson更简单的方法是使用PHP 5.3+匿名函数,如我上面的评论所示。简单,是的,魔术不需要你做任何事情-不。正则表达式对于大数据集通常速度较慢。@shiplu对于小数据集更是如此。regex编译只完成一次。这就是开销所在。PCRE对于字符串处理通常更快,在本例中可能也是数组处理,因为它的大部分操作都是C语言,而不是Zend VM中的PHP字节码。提示:您可能希望使用
$array=array\u值($array)
用于重新索引,在
array_diff
之后立即执行,以避免遇到未定义数组索引的PHP错误警告。非常感谢本教程!我的IDE对此表示不满,所以我添加了一个分号:
returnstripos(“Remove”,$e)==false