php数组查找关键函数

提供三种方法来判断一个字符串中是否包括我们定义好的词,这比较适合于在留言,评论等地址进行关键词过滤,实例代码如下:

  1. $crud = array('中国|||我国|||大地', 'kelon|||lerke|||sb', 'sesscxx');
  2. $crud = join('|',$crud);
  3. $crud = str_replace('|||', '|', $crud);
  4. $pat = "/({$crud})/i";
  5. $txt = '我知道中国你是sdfex谁!!';
  6. preg_match/*_all*/($pat, $txt, $matches);
  7. var_dump($matches);

方法二,代码如下:

  1. function checkcrud($str, $crud)
  2. {
  3. if(is_array($crud) && !emptyempty($crud))
  4. {
  5. foreach($crud as $value)
  6. {
  7. if(strpos($value, '|||') !== false)
  8. {
  9. $cruds = explode('|||', $value);
  10. $num = count($cruds);
  11. $check = 0;
  12. foreach($cruds as $val)
  13. {
  14. if(strpos($str, $val) !== false)
  15. {
  16. $check++;
  17. }
  18. }
  19. if($check == $num)
  20. {
  21. return true;
  22. }
  23. }
  24. else
  25. {
  26. if(strpos($str, $value) !== false)
  27. {
  28. return true;
  29. }
  30. }
  31. }
  32. return false;
  33. }
  34. }
  35. $crud = array('中国|||我国|||大地', 'kelon|||lerke|||ssxb', 'aaa');
  36. $test1 = '我是中国人.我国人很多.大地上全是人.-__-!!好xx的造句.';
  37. var_dump(checkcrud($test1, $crud));

方法三,代码如下:

  1. function lktest($v,$keyword){
  2. foreach ($v as $k){
  3. if (strpos($k,"|||")!==false){
  4. $kelon=explode("|||",$k);
  5. //求数组最大值
  6. $b=count($kelon);
  7. foreach($kelon as $t){
  8. //echo $t.'<br>';
  9. if (preg_match('/'.$t.'/i',$keyword)){
  10. //echo "敏感关键字";
  11. $a=$a+1;
  12. }
  13. else{
  14. $a='';
  15. }
  16. }
  17. //如果数组最大值跟$a相等时,则所有|||关键字都出现了
  18. if ($a==$b){
  19. echo "敏感关键字";
  20. }
  21. }
  22. elseif(preg_match('/'.$k.'/i',$keyword)){
  23. echo "敏感关键字";//开源代码phpfensi.com
  24. }
  25. }
  26. }