Есть IF условие:
(strpos($text, $find) !== false)
Которое ищет в переменной $text переменную $find Как можно сделать так, что бы он искал все слова из массива $find Не копируя данную функцию по несколько раз.
Можно циклом перебирать каждое слово:
$haveWords = false;
foreach ($find as $word) {
if ((strpos($text, $word) !== false) {
$haveWords = true;
break;
}
}
Можно использовать регулярку:
$string = "привет мир!";
$words = [
'привет',
'картон'
];
$wordsString = implode('|', $words);
if (preg_match("/($wordsString)/", $string)) {
echo "есть";
} else {
echo "нет";
}
Как вариант array_reduce
$haystack = "sample text string";
$needle = ['sample', 'text'];
$searchResult = array_reduce($needle, function($c, $item) use ($haystack){
return $c || strpos($haystack, $item) !== false;
});
Добавлю ещё вариант с сохранением найденных элементов в массив:
$string = 'sample text string';
preg_replace_callback(
['~sample~', '~text~'],
function ($m)use(&$result) {
$result[] = $m[0];
},
$string
);
var_dump($result);
Результат:
array(2) {
[0]=>
string(6) "sample"
[1]=>
string(4) "text"
}
Демо
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Пишу блогИспользую zabachok\behaviors\SluggableBehavior
Используется архитектура MicroПытаюсь связать таблицы, связь просто игнорируется:
Есть задача - создание плагина для WooCommerceЭто первый опыт и по этому возникают вопросы