在創建自動電子郵件時,需要用存儲的數據替換電子郵件的某些部分。PHP快速替換字符之間字符串的內容
例如。親愛的%first_name% %surname%
,感謝您參加%place_name%
。
這可以用替換每個字符串的字符串來完成,但必須有更快的方法。
假設變量名稱與我們想要從系統中獲得的相同,例如。 %first_name%
應$user['first_name']
等來代替....
在創建自動電子郵件時,需要用存儲的數據替換電子郵件的某些部分。PHP快速替換字符之間字符串的內容
例如。親愛的%first_name% %surname%
,感謝您參加%place_name%
。
這可以用替換每個字符串的字符串來完成,但必須有更快的方法。
假設變量名稱與我們想要從系統中獲得的相同,例如。 %first_name%
應$user['first_name']
等來代替....
可以利用preg_replace_callback
與數組值%
的之間的替換鍵:
$fields = array('first_name' => 'Tim', 'place_name' => 'Canada');
$string = preg_replace_callback('/%(.+?)%/', function($arr) use($fields)
{
$key = $arr[1];
return array_key_exists($key, $fields) ? $fields[$key] : $arr[0];
}, $string);
一個選項:
$vars = array(
'firstname' = 'Bob',
'surname' = 'Dole',
'place' = 'Las Vegas',
// ...
);
extract($vars);
include('my_template.phtml');
而且在my_template .phtml:
<?php
echo <<<EOF
Dear $firstname $surname,<br>
Thank you for attending the Viagra and Plantains Expo in $place.
EOF;
?>
I如果您在使用extract()
時擔心名稱衝突,則可以始終使用EXTR_PREFIX_ALL
選項或其他提取方法之一。
或者,更好的是,不要重新發明輪子。只需使用Smarty或mustache.php即可。
+1這是我如何處理輸出視圖,並且我推薦它 – Kristian 2012-07-30 16:12:49
@Kristian:是的,CakePHP以及可能還有很多其他框架/庫它通過這種方式,儘管通常具有其他功能,如輸出緩衝,並在Cake 2.0中查看塊和視圖繼承。 – 2012-07-30 16:33:44
巧妙地利用封閉的,這需要PHP – Kristian 2012-07-30 16:12:20
的新版本@Kristian:PHP 5.3,這是引入了匿名函數語法的版本,被釋放3年前。我不認爲它更新,我希望每個人都升級到至少該版本。 – 2012-07-30 16:16:15
永遠不要低估代碼/版本要求的力量,以強制減慢升級的發生 – Kristian 2012-07-30 16:27:51