【问题标题】:php define variable inside str_replace arrayphp 在 str_replace 数组中定义变量
【发布时间】:2011-01-29 05:39:44
【问题描述】:

我有一个模板系统,它用适当的内容替换诸如{HEADER} 之类的文本。我使用这样的数组,它使用 str_replace 将键替换为值。

$array = array("HEADER","This is the header");
    foreach($array as $var => $content) {
       $template = str_replace("{" . strtoupper($var). "}", $content,$template);
    }

现在我尝试使用这样的定义变量:

define("NAME","Site Name");

在标题的值内。所以我希望定义的变量在被替换的数组中,所以它看起来像这样,但它不起作用。

$array = array("HEADER","Welcome to ".NAME."'s website!");

有什么想法吗?如果我不清楚,请告诉我

【问题讨论】:

  • 当你说它“不起作用”时,发生了什么?你看到了什么?打开错误报告后,您是否看到任何伴随的错误?

标签: php templates replace


【解决方案1】:

你的数组线不应该是:

$array = array("HEADER" => "Welcome to ".NAME."'s website!");

既然您是通过键和值访问数组项?

【讨论】:

    【解决方案2】:

    您在数组中循环的方式,使用:

    foreach($array as $var => $content) {
        // ...
    }
    

    让我觉得你应该为$array 使用关联数组

    也就是说,它应该这样声明:

    $array = array("HEADER" => "Welcome to ".NAME."'s website!");
    


    而且,作为演示,这里有一个代码示例:

    $template = <<<TPL
    Hello, World !
    {HEADER}
    And here's the content ;-)
    TPL;
    
    define("NAME","Site Name");
    
    $array = array("HEADER" => "Welcome to ".NAME."'s website!");
    foreach($array as $var => $content) {
       $template = str_replace("{" . strtoupper($var). "}", $content,$template);
    }
    
    var_dump($template);
    

    我得到它的输出:

    string 'Hello, World !
    Welcome to Site Name's website!
    And here's the content ;-)' (length=73)
    

    这表明它正在工作;-)
    (不是,$array 被声明为您设置的方式)


    使用时:

    $array = array("HEADER","This is the header");
    var_dump($array);
    

    您正在声明一个包含两项的数组:

    array
      0 => string 'HEADER' (length=6)
      1 => string 'This is the header' (length=18)
    


    另一方面,当使用这个时:

    $array = array("HEADER" => "This is the header");
    var_dump($array);
    

    您正在声明一个数组:

    • 仅包含一项
    • “HEADER”是关键
    • “这是标题”作为值

    这给出了:

    array
      'HEADER' => string 'This is the header' (length=18)
    


    使用foreach ($array as $key =&gt; $value)时,需要第二个;-)


    而且,仅供参考,您可以在手册中查看以下页面:

    【讨论】:

    • 我很糟糕,我正在使用那种数组,我只是在这里即时键入它。是的,我知道如何使用数组和 foreach..
    • 这是否意味着您的问题已解决?还是还有一些 不起作用 ?如果是这样,您是否可以编辑您的问题以添加一些信息以详细说明不起作用的含义?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2023-03-24
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    相关资源
    最近更新 更多