2013-02-26 44 views
2

我有一个字符串:PHP字符串 - 删除阵列或词语检查其他

$data = "String contains works like apples, peaches, banana, bananashake, appletart"; 

我也有2个STD阵列如下包含多个字的:

$profanityTextAllowedArray = array(); 
$profanityTextNotAllowedArray = array(); 

例如:

$profanityTextAllowedArray 
(
    [0] => apples 
    [1] => kiwi 
    [2] => mango 
    [3] => pineapple 
) 

我怎样才能把字符串$data并首先从$profanityTextAllowedArray和删除任何话然后检查字符串$data$profanityTextNotAllowedArray中应标记的任何字词?

回答

2

像这样的东西可以帮助你:

$data = "apples, peaches, banana, bananashake, appletart"; 

$allowedWords = array('apples', 'peaches', 'banana'); 
$notAllowedWords = array('foo', 'appletart', 'bananashake'); 

$allowedWordsFilteredString = preg_replace('/\b('.implode('|', $allowedWords).')\b/', '', $data); 

$wordsThatNeedsToBeFlagged = array_filter($notAllowedWords, function ($word) use ($allowedWordsFilteredString) { 
    return false !== strpos($allowedWordsFilteredString, $word); 
}); 

var_dump($wordsThatNeedsToBeFlagged); 
+0

如果允许或过滤的单词列表会变大,这将使用大量的CPU。我们应该总是想到这样的情况,即使在学习的时候。 – 2013-02-26 12:03:39

+0

@Megakuh很有趣。你是否在使用pReg库或者在这里有一些其他沉重的CPU吗? – 2013-02-27 09:47:12

3
$list = explode(' ', $data); 

foreach($list as $key => $word) { 
    $cleanWord = str_replace(array(','), '', $word); // Clean word from commas, etc. 
    if(!in_array($cleanWord, $profanityTextAllowedArray)) { 
    unset($list[$key]); 
    } 
} 

$newData = implode(' ', $list); 

让我知道,如果是明确的。

+1

不会使用['trim'(http://php.net/trim)更好,而不是'str_replace'清理的话? – 2013-02-27 09:47:55

+0

@WouterJ,是的,你完全正确! – 2013-02-27 14:39:59