以下を行うためのより良い、より速い方法はありますか?
これは、コメントに禁止ワードが含まれているかどうかをチェックするクラスのメソッドです。含まれている場合は、コメントを手動で承認する必要があります。
モデル/データベースの動作方法を変更したくないので、$this->get_words()
理想的にはそのままにしておく必要があります (DB フィールドから生成されたプロパティを持つオブジェクトの配列を返します)。
PS私は冒とく的なフィルターなどが嫌われていることを知っていますが、このシナリオでは、コメントに手動での承認が必要になるだけです.
public function check_string($str) {
// Put banned words in an array
$banned_words = [];
foreach ($this->get_words() as $word) {
$banned_words[] = $word->word;
}
$patterns = array(
'/[_.-]/', '/1/', '/3/', '/4/', '/5/', '/6/',
'/7/', '/8/', '/0/', '/z/', '/@/'
);
$replacements = array(
'', 'i', 'e', 'a', 's', 'g',
't', 'b', 'o', 's', 'a'
);
// Turn str into array of individual words
$str_words = explode(" ", $str);
foreach ($str_words as $str_word) {
$str_word = strtolower(preg_replace($patterns,$replacements,$str_word));
if (in_array($str_word, $banned_words, true))
return TRUE;
}
return FALSE;
}