高效、无冗余的PHP代码
我有以下PHP摘录代码:高效、无冗余的PHP代码,php,Php,我有以下PHP摘录代码: foreach($afb_replacements as $afb_to_replace => $afb_replacement) { $sender_subject = str_replace($afb_to_replace, $afb_replacement, $sender_subject); $ar_subject = str_replace($afb_to_replace, $afb_replacement, $a
foreach($afb_replacements as $afb_to_replace => $afb_replacement) {
$sender_subject = str_replace($afb_to_replace, $afb_replacement, $sender_subject);
$ar_subject = str_replace($afb_to_replace, $afb_replacement, $ar_subject);
$final_message = str_replace($afb_to_replace, $afb_replacement, $final_message);
$final_message_text = str_replace($afb_to_replace, $afb_replacement, $final_message_text);
$ar_message = str_replace($afb_to_replace, $afb_replacement, $ar_message);
$ar_message_text = str_replace($afb_to_replace, $afb_replacement, $ar_message_text);
}
以相同的方式替换所有6个变量(所有变量中相同的文本替换为相同的替换,替换为$afb_to_replace和$afb_replacement)
我想知道的是:
如何才能更有效地编写?也许在一行代码中。我确信有更好的方法,因为这是多余的代码,但目前我没有想到其他解决方案。有什么想法吗
我对你的方法很好奇
str\u replace
接受主语参数的数组(如果您愿意,还可以接受针和干草堆)。所以你可以这样做:
$vars = str_replace($afb_to_replace, $afb_replacement, $vars);
这应该做完全相同的事情:
$in = array($sender_subject, $ar_subject, $final_message, $final_message_text, $ar_message, $ar_message_text);
$out = str_replace(array_keys($afb_replacements), array_values($afb_replacements), $in);
list($sender_subject, $ar_subject, $final_message, $final_message_text, $ar_message, $ar_message_text) = $out;
为了便于阅读,我把它分成了三行
str_replace()
接受用于搜索、替换和主题的数组
编辑:这里有一个由BoltClock提出的更漂亮的解决方案
$in = compact('sender_subject', 'ar_subject', 'final_message', 'final_message_text', 'ar_message', 'ar_message_text');
$out = str_replace(array_keys($afb_replacements), array_values($afb_replacements), $in);
extract($out);
或者,如果您不想更改当前的$afb_replacements
数组,可以这样做(从@James C窃取代码):
如果使用compact()
和extract()
可以保存一些键入的变量名。
$bad = array('a', 'b', 'c');
$good = array('x', 'y', 'z');
$old = array($sender_subject, $ar_subject, $final_message, $final_message_text, ...);
$new = str_replace($bad, $good, $old);
$bad = array_keys($afb_replacements);
$good = array_values($afb_replacements);
$old = array($sender_subject, $ar_subject, $final_message, $final_message_text, ...);
$new = str_replace($bad, $good, $old);