0

我正在尝试开始在我的脚本中使用模板,但是我在循环遍历模板中的变量时遇到了问题。我创建了一个简单的模板脚本,我的问题是它只替换了我的 1 个变量而不是所有变量。如果我使用.=问题仍然存在(我当时只替换 1 个变量)。任何人都可以帮助我了解我的脚本逻辑吗?

我的 PHP

<?php
$data= array('uno'=>'1','dos'=>'2','tres'=>'3','cuatro'=>'4','cinco'=>'5');

function tpl ($data,$tpl = null) {

    foreach ( $data as $find => $replace ) {
            $return = str_replace('{'.$find.'}',$replace,$tpl);
    }

    return $return;
}

echo tpl($data, file_get_contents('tpl.tpl'));
?>

我的 HTML 模板

<html>
<h1>{uno}</h1>
<h2>{dos}</h2>
<h3>{tres}</h3>
<h4>{cuatro}</h4>
<h5>{cinco}</h5>
</html>
4

2 回答 2

2

简单的问题,您总是从$tpl数据中的替换开始。总是重写变量内容:

function tpl ($data,$tpl = null) {

    $return  = $tpl; // this will be in foreach and will get rewritten.
    foreach ( $data as $find => $replace ) {
            $return = str_replace('{'.$find.'}', $replace, $return); // note $return from here
    }

    return $return;
}
于 2013-01-07T13:36:32.063 回答
0

代码中的问题是,您总是在 $tpl 变量的新副本中替换数据,这就是为什么您只看到一个变量被替换的原因。您必须在每次替换后更新 $tpl 变量,以便替换所有变量。

进行以下更改以解决此问题

foreach ( $data as $find => $replace ) {
        $tpl = str_replace('{'.$find.'}',$replace,$tpl);
}

return $tpl;

这将解决您的问题。

于 2013-01-07T13:40:28.437 回答