$find=array('or','and','not'); $text=array('jasvjasvor','asmasnand','tekjbdkcjbdsnot');
Я должен проверить, содержит ли массив текста какой-либо из элементов find. Я могу сделать это для одного текста, но не знаю, как это сделать для всех текстов
$counter=0; foreach($find as $txt){ if (strstr($text[0], $txt)) { $counter++; }
Если я использую эту технику, мне придется запускать foreach количество раз. Есть ли другой способ сделать это?
ПРИМЕЧАНИЕ, если значение массива содержит или, а не целое слово
http://codepad.viper-7.com/VKBMtP
вход
$find=array('or','and','not'); $text=array('jasvjasvor','asmasn','tekjbdkcjbdsnot'); // array values "jasvjasvor" and "tekjbdkcjbdsnot" contains words `or,not`
Вывод
2 ->, поскольку два слова из массива find содержатся в значениях текстового массива
Использовать array_intersect()
:
if (count(array_intersect($find, $text)) >= 1) { // both arrays have at least one common element }
Demo.
UPDATE: если вы пытаетесь найти, сколько элементов в массиве $text
содержит какое-либо из значений (частичное совпадение или совпадение слов) в $find
array, вы можете использовать следующее решение:
$counter = 0; foreach($find as $needle) { foreach ($text as $haystack) { if(strpos($haystack, $needle) !== false) $counter++; } } echo $counter; // => 2
Demo.
$counter=0; foreach($find as $txt){ foreach($txt as $value){ if (strstr($value, $txt)) { $counter++; } }