Как я могу проверить, содержит ли $string
какой-либо элемент, выраженный в массиве?
$string = 'My nAmE is Tom.'; $array = array("name","tom"); if(contains($string,$array)) { // do something to say it contains }
Есть идеи?
это то, что вы хотели? Я надеюсь, что код компилируется 🙂
$string = 'My nAmE is Tom.'; $array = array("name","tom"); if(0 < count(array_intersect(array_map('strtolower', explode(' ', $string)), $array))) { //do sth }
Я не думаю, что есть встроенная функция, которая будет обрабатывать то, что вы хотите. Однако вы можете легко написать функцию contains()
:
function contains($str, array $arr) { foreach($arr as $a) { if (stripos($str,$a) !== false) return true; } return false; }
Используя принятый ответ:
$string = 'My nAmE is Tom.'; $array = array("name","tom"); if(0 < count(array_intersect(array_map('strtolower', explode(' ', $string)), $array))) { //do sth }
Просто обратите внимание, что оператор if может быть изменен на:
if(0 < count(array_intersect(explode(' ', strtolower($string)), $array)))
так как нет необходимости использовать array_map для применения strtolower
к каждому элементу. вместо этого примените его к исходной строке.
Еще одно обходное решение для функции
function contains($string, $array, $caseSensitive = true) { $stripedString = $caseSensitive ? str_replace($array, '', $string) : str_ireplace($array, '', $string); return strlen($stripedString) !== strlen($string); }
PS. как для меня, я просто использую его без функции.
if (strlen(str_replace($array, '', $string)) !== strlen($string)) { // do it }
Что-то вроде этого будет работать:
$string = 'My nAmE is Tom.'; $array = array("name", "tom"); foreach ($array as $token) { if (stristr($string, $token) !== FALSE) { print "String contains: $token\n"; } }
<?php $input = preg_quote('blu', '~'); // don't forget to quote input string! $data = array('orange', 'blue', 'green', 'red', 'pink', 'brown', 'black'); $result = preg_grep('~' . $input . '~', $data); print_r($result); ?>
Будет ли это выполнять эту работу?
$words = explode(" ", $string); $wordsInArray = array(); foreach($words as $word) { if(in_array($word, $array)) { $wordsInArray[] = $word; } }
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'));
Другой способ сделать с функцией array_intersect (), Попробуйте под кодом:
function checkString(array $arr, $str) { $str = preg_replace( array('/[^ \w]+/', '/\s+/'), ' ', strtolower($str) ); // Remove Special Characters and extra spaces -or- convert to LowerCase $matchedString = array_intersect( explode(' ', $str), $arr); if ( count($matchedString) > 0 ) { return true; } return false; }
Гораздо проще, пожалуйста, обратитесь к ссылке in_array
$os = array("Mac", "NT", "Irix", "Linux"); if (in_array("Irix", $os)) { echo "Es Irix"; }