php查找替换

php查找替换,php,str-replace,Php,Str Replace,这更像是一个“最佳实践”问题 我有几个电子邮件模板,有几个标签,我需要找到和更换 例如: Dear [[customername]], Blah blah blah blah, and more blah. Your Invoice.... ---------------------------------------------------------- Order Status: [[orderstatus]] Order Number: [[orderid]] Date Ordered:

这更像是一个“最佳实践”问题

我有几个电子邮件模板,有几个标签,我需要找到和更换

例如:

Dear [[customername]],
Blah blah blah blah, and more blah.

Your Invoice....
----------------------------------------------------------
Order Status: [[orderstatus]]
Order Number: [[orderid]]
Date Ordered: [[dateordered]]
Payment Method: [[paymentmethod]]
Billing Statement: [[billingstatement]]
无论如何,我有几个这样的标签在双括号内。 所以我使用了一个简单的:$text=str_replace($oldWord,$newWord,$text)


我相信这是正常的做法,但我只是好奇是否有人有不同的想法。否则,我将坚持我正在做的事情。

这没有对错,正如你所说,我通常会说:

_customername_

没有特别的原因:)

您可以使用带有str_replace的array

我想说,如果您的代码格式良好,那么您现在的方式就可以了,因为这是最快的方式


您也可以使用两个数组而不是两个字符串来传递到str_replace,但我认为这不太可读

您可以将数组与str_replace一起使用:

$oldWords = array('[[customername]]',
                  '[[orderstatus]]'
                 );
$newWords = array($customerName,
                  $orderStatus
                 );

$newText = str_replace($oldWords , $newWords , $text); 
也可以使用preg_替换为数组

$oldWords = array('/\[\[customername\]\]/',
                  '/\[\[orderstatus\]\]/'
                 );
$newWords = array($customerName,
                  $orderStatus
                 );

$newText = preg_replace($oldWords , $newWords , $text); 

我无法从您的示例中确定,但如果$oldWord和$newWord是字符串(正如它们的名称所示),那么您做得不对。str_replace接受数组参数,因此您可以一次执行所有替换:

$text = str_replace($oldValues, $newValues, $text);
其中$oldValues=数组(“[[customername]]”、[[orderstatus]]、…)


$newValues=array('John Smith','approved',…)

您可以使用词法分析器编写自己的扩展名。
例如,有关编写php扩展的教程,请访问。

我个人想创建一个小模板类,如下所示:

class EmailTemplate
{
    private $_template = '';

    public function __construct($template)
    {
        $this->_template = $template;
    }

    public function __set($key,$value)
    {
        $this->_template = str_replace("[[" . $key . "]]",$value,$this->_template);
    }

    public function __toString()
    {
        return $this->_template;
    }
}
简单的用法如下:

$temp = file_get_contents("email/templates/invoice.template");

$Template = new EmailTemplate($temp);

$Template->customername = "John Doe";
$Template->orderstatus = "On Route";
$Template->orderid = 14875356;
$Template->dateordered = date();
$Template->paymentmethod = "VISA (DD)";
$Template->billingstatement = "blah";

echo $Template; // = Happy.

我认为他是从代码的角度来看的,而不是区分文本中变量的惯例。在我看来,这是解析模板最有效的方法。是的,因为他在PHP中挣扎,但在C中却蓬勃发展!