substr_count()计算php中的整个单词

时间:2017-03-01 07:28:20

标签: php search word

我是php的新手,所以,我正在制作一个单词计数器程序。我试图计算网站中特定单词的实例数。 所以,我使用Substr_count来计算单词,但问题是它会选择像#34;阳光和#34;包含像" sun"。

这样的词

这是我的代码。

 /*When the user types the word*/
 $search = $_POST["texto"]; 

 /*The website*/
 $page = $_POST["Web"];

 $web = file_get_contents($page);

 /*Count words*/
 $result = (substr_count(strip_tags(strtolower($web)), strtolower($search)));

/*Display the information*/
if($result == 0){
echo "the word " .mb_strtoupper($search). " doesn't appear";    
}else{
echo "the word " .mb_strtoupper($search). " appears $result times";
}

有什么方法可以解决这个问题?我尝试了str_word_count和preg_match_all,但这显示了很大的数字。

4 个答案:

答案 0 :(得分:0)

我会使用str_word_count()的组合来获取所有单词,并使用array_count_values()来计算这些单词出现的次数:

# Get an array with lowercase words
$array_with_words = str_word_count(strtolower('string to analyze'), 1);

# Get a count of all unique values
$array_with_words_count = array_count_values($array_with_words);

# Get the count of the word you are looking for
$your_count = $array_with_words_count[ strtolower('your_word') ];

答案 1 :(得分:0)

str_word_cound($ expression,1)函数将为您提供一个带有单词的关联数组,然后您可以使用foreach循环一次并构造一个具有单词频率的数组,如下所示:

$expr = "My test expression. <b>My</b> world.";
$words = str_word_count(strip_tags(strtolower($expr)), 1);
$groupedWords = [];
foreach ($words as $word) {
    print_r($word);
    $groupedWords[$word] ++;
}
print_r($groupedWords);

将打印:

Array
(
    [my] => 2
    [test] => 1
    [expression] => 1
    [world] => 1
)

查看单词的使用次数:

var_dump(array_key_exists('specific_word_you_look_for', $groupedWords) ? $groupedWords['specific_word_you_look_for'] : false); 

// will output the frequency or false if not found

答案 2 :(得分:0)

这样可以解决问题:

/*Count words*/
$result = preg_match_all('/\b'. strtolower($search) .'\b/', strtolower($web));

答案 3 :(得分:-1)

如果您想使用预定义功能,请使用 str_word_count()
例如:

<?php
echo str_word_count("stack gives answer");
?>

输出:3