ウィキペディアでは、人々が使用できる多くの顔文字を定義しています。このリストを文字列内の単語に一致させたい。私は今これを持っています:
$string = "Lorem ipsum :-) dolor :-| samet";
$emoticons = array(
'[HAPPY]' => array(' :-) ', ' :) ', ' :o) '), //etc...
'[SAD]' => array(' :-( ', ' :( ', ' :-| ')
);
foreach ($emoticons as $emotion => $icons) {
$string = str_replace($icons, " $emotion ", $string);
}
echo $string;
出力:
Lorem ipsum [HAPPY] dolor [SAD] samet
したがって、原則としてこれは機能します。ただし、次の 2 つの質問があります。
ご覧のとおり、':-)' の代わりに ':-)' のように、配列内の各絵文字の周りにスペースを入れています。これにより、配列が読みにくくなっていると思います。スペースなしで顔文字を保存する方法はありますが、それでも $string と一致し、それらの周りにスペースがありますか? (そして、コードは今と同じくらい効率的ですか?)
それとも、顔文字を 1 つの変数に入れ、スペースを爆発させて $string をチェックする方法はありますか? 何かのようなもの
$emoticons = array( '[HAPPY]' => ">:] :-) :) :o) :] :3 :c) :> =] 8) =) :} :^)", '[SAD] ' => ":'-( :'( :'-) :')" //etc...
str_replace はこれを行う最も効率的な方法ですか?
何百万もの文字列をチェックする必要があるため、処理時間を節約する最も効率的な方法を探しています:)