2011-10-26 8 views
0

ほとんどの絵文字の交換機能がstucturedされています次のようにキーワードを指定して文字列内の顔文字を置き換え

array(
    ':-)' => 'happy', ':)' => 'happy', ':D' => 'happy', ... 
) 

これは、私には、私は「幸せ」を区別する必要はありません特にながら(ビット冗長に見えました、:-)と非常に満足しています: - D。だから私は、このを作ってみた:

$tweet = 'RT @MW_AAPL: Apple officially rich :-) LOLWUT #ipod :('; 

function emoticons($tweet) { 
    $emoticons = array(
    'HAPPY' => array(':-)', ':-D', ':D', '(-:', '(:'), 
    'SAD' => array(':-(', ':('), 
    'WINK' => array(';-)', ';)'), 
    ); 

    foreach ($emoticons as $emotion) { 
    foreach ($emotion as $pattern) { 
     $tweet = str_replace($pattern, key($emoticons), $tweet); 
    } 
    } 

    return $tweet; 
} 

出力は次のようになります。

RT @MW_AAPL: Apple officially rich HAPPY LOLWUT #ipod SAD 

しかし、私は$顔文字から正しいキーを呼び出す方法を知りません。私のコードでは、常に "HAPPY"というキーワードで任意の顔文字を置き換えているようです。

(1)自分のコードに何か問題がある場合は、教えてください。どんな助けでも大いに感謝されます:-) (2)ここでstr_replaceを使用していますが、他の多くのfunciotnsはpreg_replaceを使用しています。それの利点は何でしょうか?

答えて

2

これはstr_replaceは、その最初の2つのパラメータのいずれかの配列を受け入れているという事実を利用して、十分なはずです:

foreach ($emoticons as $emot => $icons) { 
    $tweet = str_replace($icons, $emot, $tweet); 
} 

See it in action

1

変更この:これに

foreach ($emoticons as $emotion) { 
    foreach ($emotion as $pattern) { 
     $tweet = str_replace($pattern, key($emoticons), $tweet); 
    } 
} 

foreach ($emoticons as $key => $emotion) { 
     $tweet = str_replace($emotion, $key, $tweet); 
} 
関連する問題