Последовательность содержит любые пункты во множестве (без учета регистра)

Как я могу проверить если a $string содержит какой-либо из пунктов, выраженных во множестве?

$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(contains($string,$array))
{
// do something to say it contains
}

Какие-либо идеи?

26
задан tarnfeld 23 January 2010 в 20:14
поделиться

5 ответов

Это то, что вы хотели? Я надеюсь, что этот код компилируется :)

$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(0 < count(array_intersect(array_map('strtolower', explode(' ', $string)), $array)))
{
  //do sth
}
21
ответ дан 28 November 2019 в 06:01
поделиться

Я не думаю, что есть встроенная функция, которая будет обрабатывать то, что вы хотите. Вы можете легко написать , содержит функцию [) , однако:

function contains($str, array $arr)
{
    foreach($arr as $a) {
        if (stripos($str,$a) !== false) return true;
    }
    return false;
}
80
ответ дан 28 November 2019 в 06:01
поделиться

Нечто подобное сработает:

$string = 'My nAmE is Tom.';
$array = array("name", "tom");
foreach ($array as $token) {
    if (stristr($string, $token) !== FALSE) {
        print "String contains: $token\n";
    }
}
4
ответ дан 28 November 2019 в 06:01
поделиться
function contains($str, $arr)
{
  $ptn = '';
  foreach ($arr as $s) {
    if ($ptn != '') $ptn .= '|';
    $ptn .= preg_quote($s, '/');
  }
  return preg_match("/$ptn/i", $str);
}

echo contains('My nAmE is Tom', array('name', 'tom'));
0
ответ дан 28 November 2019 в 06:01
поделиться

Будет ли это сделать работу?

$words = explode(" ", $string);
$wordsInArray = array();
foreach($words as $word) {
    if(in_array($word, $array)) {
        $wordsInArray[] = $word;
    }
}
0
ответ дан 28 November 2019 в 06:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: