Функция strpos поиск массива по переменной

186
03 июня 2018, 19:30

Есть IF условие:

(strpos($text, $find) !== false)

Которое ищет в переменной $text переменную $find Как можно сделать так, что бы он искал все слова из массива $find Не копируя данную функцию по несколько раз.

Answer 1

Можно циклом перебирать каждое слово:

$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 "нет";
}
Answer 2

Как вариант array_reduce

$haystack = "sample text string";
$needle = ['sample', 'text'];

$searchResult = array_reduce($needle, function($c, $item) use ($haystack){                        
                    return $c || strpos($haystack, $item) !== false; 
                 });
Answer 3

Добавлю ещё вариант с сохранением найденных элементов в массив:

$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"
}

Демо

READ ALSO
Yii2 Missing required parameters: slug (Bad Request (#400))

Yii2 Missing required parameters: slug (Bad Request (#400))

Пишу блогИспользую zabachok\behaviors\SluggableBehavior

214
Phalcon игнорирует связи моделей

Phalcon игнорирует связи моделей

Используется архитектура MicroПытаюсь связать таблицы, связь просто игнорируется:

190
WooCommerce hooks ( Новый заказ)

WooCommerce hooks ( Новый заказ)

Есть задача - создание плагина для WooCommerceЭто первый опыт и по этому возникают вопросы

179
перебор массива (php)

перебор массива (php)

Есть цикл перебора массива

164