PHP проверяет несколько слов в длинной строке из одного слова

используя strpos, я могу найти одно слово в строке, но как мне найти много слов?

Я знаю, как это сделать, когда строка содержит слова, разделенные пробелом, но, например, если у меня есть array('hi','how','are','you') и строка $string = 'hihowareyoudoingtoday?'
Как я могу вернуть общую сумму, найденную для соответствия?

-1

Решение

Ты можешь использовать 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~

~ это только разделитель шаблона.

| это логическое ИЛИ

Обратите внимание, что поиск выполняется слева направо символ за символом в строке, и каждая альтернатива проверяется до совпадения. Таким образом, первое слово, которое соответствует в позиции, сохраняется как результат соответствия (в $m).
Понимание этого механизма важно. Например, если у вас есть строка baobab и шаблон ~bao|baobab~, результат будет только bao так как это первая проверенная альтернатива.

Другими словами, если вы хотите сначала получить самые большие слова, вам нужно сначала отсортировать массив по размеру.

2

Другие решения

Да, вы можете использовать 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
1