search — substr_count () подсчитывает целые слова в переполнении стека

Я новичок в php, поэтому я делал программу для подсчета слов. Я пытался посчитать, сколько экземпляров конкретных слов на веб-сайте.
Итак, я использовал Substr_count для подсчета слов, но проблема в том, что он воспринимает слова типа «солнечный свет» как содержащие слова типа «солнце».

Это мой код

 /*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, но это показывает большие цифры.

1

Решение

Это сделает свое дело:

/*Count words*/
$result = preg_match_all('/\b'. strtolower($search) .'\b/', strtolower($web));
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') ];
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
0

Если вы хотите использовать предопределенную функцию, используйте str_word_count ()
пример:

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

Выход: 3

-1
По вопросам рекламы [email protected]