有可能检测$string
是否与$array
中的所有单词匹配。
预先不知道的单词顺序(用户输入的文本)。
array(
'test',
'shmest',
'zest',
'fest',
'etcest'
);
我承诺我可以:
$is_match = true;
foreach ($array as $word) {
if (!strpos($string, $word) === false) {
$is_match = false;
break;
}
}
(可以|应该)我通过preg_match [_all]做出如上所述的事情吗?
EDIT1
优先级是内存和快速工作。
测试了2个unswers并拥有上面的内容 https://eval.in/144266 所以我的速度最快
$string
可以包含任何符号
答案 0 :(得分:3)
您可以使用LookAheads创建一个RegEx:
$regex='/(?=.*?'.implode(')(?=.*?', $needles).')/s';
然后对你的字符串进行简单的检查:
if (preg_match($regex,$string)===1) echo 'true';
演示代码:https://eval.in/144296
RegEx:http://regex101.com/r/eQ0hU4
答案 1 :(得分:2)
使用preg_split()
和array_intersect()
:
$words = preg_split("/(?<=\w)\b\s*/", $input, -1, PREG_SPLIT_NO_EMPTY);
echo (array_intersect($arr, $words) == $arr) ? 'True' : 'False';
基本上preg_split()
将输入字符串拆分为单词数组。 array_intersect()
检查$arr
中是否存在$words
中的所有元素。