PHP使用array_filter

已经看过

我将尽力解释我的情况,所以请多多包涵。

我有一个包含单词的数组,例如:

This is a test array

现在,我创建了另一个看起来相似但带有2个单词的数组,看起来像这样:

This is is a a test test array

好的,这是我的问题开始的地方。我有一个“常用词”数组,这些单词应从数组中排除。假设在本例中这些常用词是isand a现在,我首先在单个单词数组上搜索常见单词,因此我可以使用if(in_array($word, $common_words)) continue;which使其跳过一个(如果它位于common_words数组中)。

但这将导致此数组:

This test test array

但这不是我希望它发生的方式。应该是这样的:

test array

因为这是在我们开始取出“ common_words”之前,最初这两个单词彼此相邻的唯一一个单词。(你还在听我说吗?)

这里的问题是,if(in_array)如果我有一个包含2个单词的数组,它将不再起作用。所以我做了一些研究,偶然发现了这个array_filter命令。我认为这是我所需要的,但是我对如何使用/将其应用于我的代码一无所知。

我希望我对它的解释足够好,让您了解我的问题,如果有人可以帮助我,我将不胜感激。

提前致谢!

阿尔玛·杜(Alma Do)

您的猜测是正确的,可以使用:

$array = ['this is', 'array array', 'an array', 'test array'];
$stop  = ['is', 'test'];

$array = array_filter($array, function($x) use ($stop)
{
   return !preg_match('/('.join(')|(', $stop).')/', $x);
});

-ie使用模式排除其中带有某些单词的所有项目 array_filter()

这将与过滤一起使用,因为它将通过regex进行匹配,即从中$stop获取regex(is)|(test)

一个好主意是分别评估正则表达式,因此不要在每次array_filter()迭代内都对其进行评估,例如:

$array   = ['this is', 'array array', 'an array', 'test array'];
$stop    = ['is', 'test'];
$pattern = '/('.join(')|(', $stop).')/';

$array = array_filter($array, function($x) use ($pattern)
{
   return !preg_match($pattern, $x);
});

重要说明#1:如果停用词可能包含一些特殊字符,这些特殊字符将在正则表达式中以特殊方式处理,则需要使用以下命令preg_quote()

$pattern = '/'.join('|', array_map(function($x)
{
   return '('.preg_quote($x, '/').')';
}, $stop)).'/';

$array = array_filter($array, function($x) use ($pattern)
{
   return !preg_match($pattern, $x);
});

重要说明#2:如果停用词数组过长,则可能由于其长度(太大)而导致regex编译失败。有一些技巧可以克服它,但如果是您的情况,则最好strpos()改用以下方法:

$array = array_filter($array, function($x) use ($stop)
{
   foreach($stop as $word)
   {
      if(false!==strpos($x, $word))
      {
         return false;
      }
   }
   return true;
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP的array_filter对面?

来自分类Dev

php array_filter匿名函数传递$ this

来自分类Dev

php array_filter的语法正确吗?

来自分类Dev

PHP循环和array_filter

来自分类Dev

php array_filter的语法正确吗?

来自分类Dev

PHP array_filter多回调

来自分类Dev

php array_filter 过滤太多

来自分类Dev

在array_filter中使用外部变量

来自分类Dev

使用array_filter过滤数组

来自分类Dev

使用array_filter和foreach,错误

来自分类Dev

使用 array_filter 过滤多维数组

来自分类Dev

Array_Filter 移除

来自分类Dev

使用array_filter时出现意外的PHP通知和警告

来自分类Dev

使用array_filter PHP后出现未定义的偏移量错误

来自分类Dev

使用array_filter时出现意外的PHP通知和警告

来自分类Dev

PHP:如何使用 array_filter() 过滤 JSON 响应值?

来自分类Dev

php count + array_filter多维数组中的多个值

来自分类Dev

“简单”多级数组上的PHP Array_filter

来自分类Dev

php array_filter返回对象数组上的空数组

来自分类Dev

PHP array_filter() 在多维数组上按条件

来自分类Dev

使用array_filter删除空的子数组值

来自分类Dev

使用回调自定义array_filter

来自分类Dev

PHPExcel array_filter()错误

来自分类Dev

随着array_filter和foreach,错误

来自分类Dev

array_filter()无法正常工作

来自分类Dev

对象数组上的 array_filter

来自分类Dev

如何实现array_filter() 更清晰

来自分类Dev

php array_filter可用于函数,但不能在类内部作为方法

来自分类Dev

PHP array_filter从数组中仅获取一个值