Проверьте, содержит ли массив элементы, имеющие элементы другого массива

$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++; } }