使用strpos,我可以在字符串中找到一个单词,但我怎样才能找到很多单词?
我知道当字符串包含用空格分隔的单词时如何操作,但是例如,如果我有array('hi','how','are','you')
和字符串$string = 'hihowareyoudoingtoday?'
如何返回找到匹配的总金额?
答案 0 :(得分:2)
您可以使用返回匹配数的preg_match_all
:
$words = array('hi','how','are','you');
$nb = preg_match_all('~' . implode('|', $words) . '~', $string, $m);
print_r($m[0]);
echo "\n$nb";
preg_match_all
是一个搜索字符串中模式的所有出现的函数。在本示例中,模式为:
~hi|how|are|you~
~
只是一个模式分隔符。
|
是逻辑OR
请注意,搜索是在字符串中逐个字符地从左到右执行,并且每个备选项都会进行测试,直到匹配为止。因此,在某个位置匹配的第一个单词将存储为匹配结果(进入$m
)。
理解这种机制很重要。例如,如果您有字符串baobab
和模式~bao|baobab~
,则结果将只是bao
,因为它是第一个经过测试的替代方案。
换句话说,如果您想先获取最大的单词,则需要按大小对数组进行排序。
答案 1 :(得分:1)
是的,在这种情况下您可以使用strpos()
:
示例:
$haystack = 'hihowareyoudoingtoday?';
$needles = array('hi','how','are','you');
$matches = 0;
foreach($needles as $needle) { // create a loop, foreach string
if(strpos($haystack, $needle) !== false) { // use stripos and compare it in the parent string
$matches++; // if it matches then increment.
}
}
echo $matches; // 4