我有一篇文章,我想计算“lorem ipsum dolor”这个短语的出现次数。
奥勒姆·伊普苏姆·多洛尔坐在阿梅特的位子上,向精英们致意。大叶地榆多洛尔ipsum lorem。
即使搜索短语是按不同的顺序写的,算法也应该计算出现次数。我强调了预期的结果有没有比使用正则表达式和所有可能的组合更好的方法来实现这一点呢?
在这种情况下,结果应该等于3
大叶紫罗兰
大叶地榆
阴唇
这个短语大约有3-4个单词,字符串将是网页的内容。

最佳答案

$haystack = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ipsum lorem dolor Curabitur ac risus nunc. Dolor ipsum lorem.';
$needle = 'Lorem ipsum dolor';

$hayWords = str_word_count(
    strtolower($haystack),
    1
);
$needleWords = str_word_count(
    strtolower($needle),
    1
);
$needleWordsCount = count($needleWords);

$foundWords = array_intersect(
    $hayWords,
    $needleWords
);

$count = array_reduce(
    array_keys($foundWords),
    function($counter, $item) use ($foundWords, $needleWordsCount) {
        for($i = $item; $i < $item + $needleWordsCount; ++$i) {
            if (!isset($foundWords[$i]))
                return $counter;
        }
        return ++$counter;
    },
    0
);

var_dump($count);

10-07 13:36
查看更多