簡體   English   中英

php - >從數組中刪除包含黑名單中單詞的項目

[英]php -> delete items from array which contain words from a blacklist

我有一個包含幾條Twitter推文的數組,想要刪除此數組中包含以下單詞之一的所有推文blacklist | blackwords | somemore

誰可以幫我解決這個案子?

這是一個建議:

<?php
$banned_words = 'blacklist|blackwords|somemore';
$tweets = array( 'A normal tweet', 'This tweet uses blackwords' );
$blacklist = explode( '|', $banned_words );

//  Check each tweet
foreach ( $tweets as $key => $text )
{
    //  Search the tweet for each banned word
    foreach ( $blacklist as $badword )
    {
        if ( stristr( $text, $badword ) )
        {
            //  Remove the offending tweet from the array
            unset( $tweets[$key] );
        }
    }
}
?>

你可以使用array_filter()函數:

$badwords = ... // initialize badwords array here
function filter($text)
{
    global $badwords;
    foreach ($badwords as $word) {
        return strpos($text, $word) === false;
    }
}

$result = array_filter($tweetsArray, "filter");

使用array_filter

檢查此樣本

$tweets = array();

function safe($tweet) {
    $badwords = array('foo', 'bar');

    foreach ($badwords as $word) {
        if (strpos($tweet, $word) !== false) {
            // Baaaad
            return false;
        }
    }
    // OK
    return true;
}

$safe_tweets = array_filter($tweets, 'safe'));

你可以通過很多方式實現這一目標,所以如果沒有更多信息,我可以提供這個真正的起始代碼:

$a = Array("  fafsblacklist hello hello", "white goodbye", "howdy?!!");
$clean = Array();
$blacklist = '/(blacklist|blackwords|somemore)/';

foreach($a as $i) {
  if(!preg_match($blacklist, $i)) {
    $clean[] = $i;
  }
}

var_dump($clean);

使用正則表達式:

preg_grep($array,"/blacklist|blackwords|somemore/",PREG_GREP_INVERT)

但我警告你,這可能是有效的,你必須照顧黑名單中的標點字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM