我有这个功能,有人在这里帮助我最小化以提高效率,但问题是这个更高效的代码并不像我原来那样工作。
新课程功能
public function iterate($d,$fn){
foreach($d as $item=>$value){
$txt = str_replace('{'.$value.'}',$item[$value],$fn);
//as well as
// $txt = str_replace('{$value}',$item[$value],$fn);
echo $txt;
}
}
原始班级功能
public function iterate($d,$t,$fn){
foreach($d as $item){
if($t == "post"){
$txt = str_replace('{author}',$item["author"],$fn);
$txt = str_replace('{id}',$item["id"],$txt );
$txt = str_replace('{content}',$item["content"],$txt);
$txt = str_replace('{date}',$item["date"],$txt);
echo $txt;
}
}
}
实例化我做的功能
easyCMS->iterate($post,'<div class="post" id="post_{id}">{content}</div><div class="author">{author} on {date}</div>');
新功能输出:
<div class="post" id="post_{id}">{content}</div>
<div class="author">{author} on {date}</div>
我的原始功能正确输出,例如。
<div class="post" id="post_1">Hello World</div>
<div class="author">Mr.EasyBB on 5/28/2014</div>
我错过了什么,为什么我原来的工作完美而不是这个新的更小更多&#34;高效&#34;代码不行吗?
更新
的var_dump($值);
array(12) {
[0]=> string(1) "1" ["id"]=> string(1) "1"
[1]=> string(59) "Hello this is post one testing iterator easyCMS->iterate();" ["content"]=> string(59) "Hello this is post one testing iterator easyCMS->iterate();"
[2]=> string(9) "Mr.EasyBB" ["author"]=> string(9) "Mr.EasyBB"
[3]=> string(10) "2014-05-24" ["date"]=> string(10) "2014-05-24"
[4]=> string(11) "Recent Post" ["category"]=> string(11) "Recent Post"
[5]=> string(26) "html,css,javascript,jquery" ["tags"]=> string(26) "html,css,javascript,jquery"
}
答案 0 :(得分:2)
你在功能中做错了替换:
public function iterate($d,$fn){
^^^---original string
foreach($d as $item=>$value){
$txt = str_replace('{'.$value.'}',$item[$value],$fn);
^^^---always use the original string
应该是
foreach(...) {
$fn = str_replace(....., $fn);
^^^^---change this
}
echo $fn;
这样你就可以不断修改在上一次迭代中修改过的字符串。
现在你正在做
$original (change {foo}) -> $modified
$original (change {bar}) -> $modified
而不是
$original (change{foo}) -> $modified
$modified (change{bar}) -> $modified_again
$modified_again (etc....
答案 1 :(得分:0)
Marc B是对的。这就是我认为你需要的东西:
public function iterate($d, $fn) {
foreach ($d as $item => $value) {
$fn = str_replace('{' . $item . '}', $value, $fn);
}
echo $fn;
}
祝你好运!