2

次のような文字列があります。

$text = 'Hello this is my string and texts';

配列に許可されていない単語がいくつかあります。

$filtered_words = array(
            'string',
            'text'
        );

$textフィルター処理された単語をすべて に置き換えたい***ので、次のように書きました。

$text_array = explode(' ', $text);
        foreach($text_array as $key => $value){
            if(in_array($text_array[$key], $filtered_words)){
                $text = str_replace($text_array[$key], '***', $text);
            }
        }
echo $text;

出力:

Hello this is my *** and texts

ただし、フィルター処理された単語 (テキスト) も含まれているためtexts、置き換える関数も必要です。***

どうすればこれを達成できますか?

ありがとう

4

2 に答える 2

10

すぐに実行できますstr_replace。配列から単一の文字列への置換をサポートしています。

$text = 'Hello this is my string and texts';

$filtered_words = array(
    'string',
    'texts',
    'text',
);

$zap = '***';

$filtered_text = str_replace($filtered_words, $zap, $text);

echo $filtered_text;

出力 (デモ):

Hello this is my *** and ***

最初に最大の単語があることに注意str_replaceしてください。そのモードにあるときは、ループのように次々に置換が行われることに注意してください。そのため、より短い単語は、それより前であれば、より大きな単語の一部になる可能性があります。

よりフェイルセーフなものが必要な場合は、最初にテキスト分析を行うことを検討する必要があります。これは、置換したいかもしれない単語を知らなかったが、これまで考えていなかった場合にも教えてくれます。

于 2013-02-17T07:46:20.057 に答える
2

str_replaceは、最初のパラメーターとして配列を受け入れることができます。for eachしたがって、ループはまったく必要ありません。

$filtered_words = array(
    'string',
    'text'
);
$text = str_replace($filtered_words, '***', $text);
于 2013-02-17T07:45:47.573 に答える