首页 > 解决方案 > 有效地从字符串中删除所有数组值,如果数组值是字符串中单词的一部分,则整个单词也必须从字符串中删除

问题描述

我有一个字符串数组

$array = array("are", "finite", "get", "er");

和一个字符串

$string = "You are definitely getting better today";

我期待这个输出

You today

我想有效地从字符串中删除所有数组值,如果数组值是字符串中单词的一部分,则整个单词也必须从字符串中删除。

这是我目前正在处理的代码

foreach ($array as $a)
{
    $string = str_replace($a, "", $string);
}
echo $string;

它从字符串中删除数组值,但不会删除包含数组值的单词。

编辑:

由于我的字符串是用户提供的并且大约 4096 个字符长,请有人指导我哪个答案在速度和内存使用方面更有效。

标签: php

解决方案


试试这个(正则表达式方法):

$patterns = ["are", "finite", "get", "er"];
$string = "You are definitely getting better today";

$re = '\w*('.implode('|', $patterns).')\w*';
$string = preg_replace('#'.$re.'#', '', $string);
$string = preg_replace('#\h{2,}#', ' ', $string);
echo $string;

推荐阅读