Intereting Posts
что является лучшим разделителем для разделения нескольких электронных писем XAMPP localhost возвращает объект, не найденный после установки Laravel Как проверить, существует ли файл на удаленном сервере с помощью PHP? Как создать двухсторонние методы кодирования / декодирования с использованием специального ключа – PHP? Ограничение API Facebook Post Post Post Как вернуть false, если 0 строк затронуты PDO? Где PHP.ini в Mac OS X Lion? Думал, что это было в / usr / local / php5 / lib незаконно 0000-00-00 00:00:00 timestamp отправляется php в mysql с использованием codeigniter Php получить строку между тегами Разработка базы данных для разработки веб-приложения «Quiz» с использованием PHP и MySQL Предлагаемое решение: создание уникальных идентификаторов в распределенной среде Являются ли конструкторы абстрактного класса неявным образом вызваны при создании экземпляра производного класса? Как получить параметры POST с неправильным заголовком PHP Получить имя дочернего класса в статической функции Как можно защитить PHP-код?

Проверьте, содержит ли строка слово в массиве

Это для чат-страницы. У меня есть $string = "This dude is a mothertrucker" . У меня есть множество badwords: $bads = array('truck', 'shot', etc) . $bads = array('truck', 'shot', etc) . Как я могу проверить, содержит ли $string любое слово из $bad ?
Пока у меня есть:

  foreach ($bads as $bad) { if (strpos($string,$bad) !== false) { //say NO! } else { // YES! } } 

За исключением случаев, когда я делаю это, когда пользователь вводит слово в списке $bads , вывод НЕТ! затем ДА! поэтому по какой-то причине код запускает его дважды.

Solutions Collecting From Web of "Проверьте, содержит ли строка слово в массиве"

 function contains($str, array $arr) { foreach($arr as $a) { if (stripos($str,$a) !== false) return true; } return false; } 

1) Самый простой способ:

 $yourWord='nine'; $targets = array("four", "eleven", "nine", "six"); if (in_array($yourWord, $targets)) { echo "FOUND!!"; } 

2) Другой способ (при проверке массивов по отношению к другим массивам):

 $keywords=array('one','two','three'); $targets=array('eleven','six','two'); foreach ( $targets as $string ) { foreach ( $keywords as $keyword ) { if ( strpos( $string, $keyword ) !== FALSE ) { echo "The word appeared !!" } } } 

вы можете попробовать это вместо своего кода

 $string = "This dude is a mothertrucker"; $bads = array('truck', 'shot'); foreach($bads as $bad) { $place = strpos($string, $bad); if (!empty($place)) { echo 'Bad word'; exit; } else { echo "Good"; } } 

Вы можете перевернуть свой плохой массив слов и сделать такую ​​же проверку намного быстрее. Определите каждое плохое слово как ключ массива. Например,

 //define global variable that is available to too part of php script //you don't want to redefine the array each time you call the function //as a work around you may write a class if you don't want global variable $GLOBALS['bad_words']= array('truck' => true, 'shot' => true); function containsBadWord($str){ //get rid of extra white spaces at the end and beginning of the string $str= trim($str); //replace multiple white spaces next to each other with single space. //So we don't have problem when we use explode on the string(we dont want empty elements in the array) $str= preg_replace('/\s+/', ' ', $str); $word_list= explode(" ", $str); foreach($word_list as $word){ if( isset($GLOBALS['bad_words'][$word]) ){ return true; } } return false; } $string = "This dude is a mothertrucker"; if ( !containsBadWord($string) ){ //doesn't contain bad word } else{ //contains bad word } 

В этом коде мы просто проверяем, существует ли индекс, а не сравниваем плохое слово со всеми словами в списке плохих слов.
isset намного быстрее, чем in_array и немного быстрее, чем array_key_exists.
Убедитесь, что ни одно из значений в массиве плохих слов не установлено в значение null.
isset вернет false, если для индекса массива установлено значение null.

Положите и выйдите или умрите, как только найдете какие-нибудь плохие слова, как это

 foreach ($bads as $bad) { if (strpos($string,$bad) !== false) { //say NO! } else { echo YES; die(); or exit; } } 

Хотите этого?

 $string = "This dude is a mothertrucker"; $bads = array('truck', 'shot', 'mothertrucker'); foreach ($bads as $bad) { if (strstr($string,$bad) !== false) { echo 'NO<br>'; } else { echo 'YES<br>'; } } 

Я бы пошел таким образом, если строка чата не так долго.

 $badwords = array('motherfucker', 'ass', 'hole'); $chatstr = 'This dude is a motherfucker'; $chatstrArr = explode(' ',$chatstr); $badwordfound = false; foreach ($chatstrArr as $k => $v) { if (in_array($v,$badwords)) {$badwordfound = true; break;} foreach($badwords as $kb => $vb) { if (strstr($v, $kb)) $badwordfound = true; break; } } if ($badwordfound) { echo 'Youre nasty!';} else echo 'GoodGuy!'; 
  $string = "This dude is a good man"; $bad = array('truck','shot','etc'); $flag='0'; foreach($bad as $word){ if(in_array($word,$string)) { $flag=1; } } if($flag==1) echo "Exist"; else echo "Not Exist"; 

Существует очень короткий сценарий php, который можно использовать для идентификации плохих слов в строке, которая использует str_ireplace следующим образом:

 $string = "This dude is a mean mothertrucker"; $badwords = array('truck', 'shot', 'ass'); $banstring = ($string != str_ireplace($badwords,"XX",$string))? true: false; if ($banstring) { echo 'Bad words found'; } else { echo 'No bad words in the string'; } 

Единственная строка:

 $banstring = ($string != str_ireplace($badwords,"XX",$string))? true: false; 

делает всю работу.

Если вы хотите сделать это с помощью 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; } 

Хотя я не знаю php, это кажется простой проблемой программирования. Вы можете просто обозначить строку и использовать такую ​​карту, как структура, которая учитывает появление каждого слова, а затем вы можете просто перекрестно проверить каждое плохое слово на карте. Карта будет иметь слова как ключ и значение, как количество раз, когда слово входит в строку. И тогда вам нужно всего лишь найти карту для каждого плохого слова.