我试图在数组中搜索坏词。 我的数组看起来像:
Array
(
[base] => 2312783821823912
[charset] => utf-8
[Product] => Samsung PD291 Printer
[meta] => Array
(
[description] => fucking nice Printer
[keywords] =>
)
[n2] => Array
(
[w1] => Array
(
[0] => printer
)
[w2] => Array
(
[0] => Menu
[1] => Main menu
[2] => Social
[3] => Speakers
[4] => 2015
[5] => Highlight
[6] => And... Action!
[7] => Short
[8] => Platin
[9] => Gold
[10] => Silber
[11] => Bronze
[12] => partner
)
)
}
我有一个badword数组,如:$ bad = array(“fuck”,“....);
现在我有点困惑,什么是扫描第一个数组的所有值的最快方法,如果它包含坏词,则返回true或false?
任何建议都会有所帮助; - )
谢谢!
//编辑:
谢谢@大家...... 我会用:
class BadWordFilter {
private static $bad = "/fuck|ass/i";
public static function hasBadWords($input) {
foreach ($input as $element) {
if (is_array($element)) {
if (self::hasBadWords($element)) {
return true;
}
} else {
if (preg_match(self::$bad, $element)) {
return true;
}
}
}
return false;
}
}
我已经对它进行了测试,它将是解决我问题的最快解决方案; - ))
谢谢大家
答案 0 :(得分:2)
我认为最快的方法是json_encode
数组并扫描json字符串以查找错误的单词。
未经测试,但这样的事情应该有效:
function badWordsExists($input_array, $blacklist){
$jsonstring = json_encode($input_array);
foreach($blacklist as $string) {
if(strpos($jsonstring, $string) !== false) {
return true;
}
}
return false;
}
使用正则表达式应该更快,但这只是一个例子,让你知道它是如何工作的。
答案 1 :(得分:0)
您可以使用递归搜索来执行此操作,该搜索在找到错误单词时结束其任务。请注意,将其转换为json是次优的,因为您将其转换为字符串然后尝试在字符串中查找坏字。这很费时,特别是如果你有很多数组来检查坏词。
public class BadWordFilter {
private static $bad = array(); //use your array instead
public static function hasBadWords($input) {
foreach ($element in $input) {
if (is_array($element)) {
if (self::hasBadWords($element)) {
return true;
}
} else {
foreach ($bad as $badWord) {
if(strpos($element, $badWord) !== false) {
return true;
}
}
}
}
return false;
}
}
答案 2 :(得分:0)
递归函数就是答案。下面的代码将检测给定数组的任何元素中的任何字符串。
<?php
function containsWord($haystack, $badWord)
{
foreach ($haystack as $index => $item) {
if (is_array($item)) {
containsWord($item, $badWord);
} else {
if (strpos($item, $badWord) !== false) {
echo "'$badWord' has been detected in '$item' at index '$index'";
return true;
}
}
}
echo "$badWord is not in the array";
return false;
}
$array = [1 => [4=> 'badword', 5=> 'qw'], 2 => 'b', 3 => 'c'];
containsWord($array, 'bad');
上述代码的输出将是:
'bad' has been detected in 'badword' at index '4'
希望这会有所帮助:)