Заменить смайлики в строке ключевыми словами - PullRequest
0 голосов
/ 26 октября 2011

Большинство функций замены смайликов структурированы следующим образом:

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

Однако я не знаю, как вызвать правильный ключ из $ emoticons. В моем коде, кажется, всегда заменить любой смайлик с ключевым словом "HAPPY".

(1) Если вы видите, что не так с моим кодом, пожалуйста, дайте мне знать. Любая помощь будет принята с благодарностью :-) (2) Я использую здесь str_replace, в то время как многие другие функции используют preg_replace. В чем было бы преимущество этого?

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

Этого должно быть достаточно, учитывая тот факт, что str_replace принимает массивы для любого из его первых двух параметров:

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

Посмотреть в действии .

1 голос
/ 26 октября 2011

Измените это:

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);
}
...