2016-07-18 1 views
0

これはするpreg_matchアレイ列置換

常州, 的, 妈咪ZA, 已揽件快件已从, 常州, 发出快件到达 

以下、これらの各々は、詳細を追跡している出力アレイ$track['context']を有します。私は$badWordsからの文字列が存在

$badWords = ['常州', '的']; // I would want these to end up being ['one', 'two'] 
$arrayToCheck = $track['context']; 
foreach ($badWords as $badWord) { 
    if (preg_match("/($badWord)/", $arrayToCheck)) { 
     // Do I run my preg_match function here? 
    } 
} 
+0

上で実行を参照してください。 :コードがエラーを生成します。 (1)* $ badWords *は配列ではないので、 'foreach'はその上で動作しません。 (2)* arrayToCheck *は文字列ではないので、* preg_match *は動作しません。 – trincot

+0

それどころか、私はもっとよく説明しなければならないかもしれません。どのように '$ badWords = '常州的';を' '配列にして、それを置き換えたい適切な文字列で' foreach'を使って実行しますか? – NooBskie

+0

'常州的'を配列に変換するには、次のようにします。 – trincot

答えて

1

私は単語がキーであり、連想配列の値を置換するという悪い単語のデータ構造を提案します。

は、次に、あなたのコンテンツの配列をループし、コールバック関数の置き換えを行うことができ:

// Sample data: 
$track['context'] = array(
    'qdf 常州', 
    'fdhlkjfq fdkq ', 
    '的 fdsqfsf' 
); 
// Make a translation table for the bad words: 
$badWords = [ 
    '常州' => 'one', 
    '的' => 'two' 
]; 
// Build a regular expression that matches any of the above words: 
$regexp = "/\b(" . implode('|', array_map('preg_quote', array_keys($badWords))) . ")\b/u"; 

// Iterate over the content 
foreach ($track['context'] as &$subject) { 
    $subject = preg_replace_callback($regexp, function($matches) use ($badWords) { 
     // Replace the matched bad word with what we have mapped for it: 
     return $badWords[$matches[0]]; 
    }, $subject); 
} 
// Output results: 
print_r ($track['context']); 

は、* *「私は、次のコードを配列を実行しています」それはeval.in

0

まず第一であるならば、交換してください$track['context']の内側にある各項目のpreg_matchを試してみて、実行するには、次のコードを配列を実行しています

、$ BADWORDSを作ります配列は、同じよう:

$badWords = array('bad_word1', 'bad_word2'); 

第二に、私は他の内側に1つの文字列の出現を検索するために使用されstrpos機能を、使用します。

最後に、コードで$ noBadWordsFoundをfalseに設定してください。