大多数表情符号替换函数的结构如下:
array(
':-)' => 'happy', ':)' => 'happy', ':D' => 'happy', ...
)
对我而言,这似乎有点多余(特别是在我不需要区分'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。那有什么好处?
答案 0 :(得分:2)
这应该足够了,利用str_replace
接受任何前两个参数的数据这一事实:
foreach ($emoticons as $emot => $icons) {
$tweet = str_replace($icons, $emot, $tweet);
}
<强> See it in action 强>
答案 1 :(得分: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);
}