这是php的错误吗?你会如何修补'它?

时间:2017-12-16 14:20:57

标签: php

我在 php

中处理这个简单的脚本
$a = array('la','co');
foreach ($a as $unboldeda){
    $boldeda[] = '<b style="color: teal;">'.$unboldeda.'</b>';
}
$c = 'land of copper';
echo '<a href="#">'.str_replace($a, $boldeda, $d=$c).'</a>';

它应该导致   co <​​/ strong> pper

la

但结果是:

co <​​/ strong> lor:teal;&#34;&gt; co <​​/ strong> pper的土地

bacause str_replace()不仅替换$ d的值,而且还替换$ c的值,因此在第二次迭代中$ c也将包含html标记。在我看来,这对编程语言没有多大意义。你会如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

strtr的解决方案:

$a = array('la','co');
foreach ($a as $unboldeda){
    $boldeda[$unboldeda] = '<b style="color: teal;">'.$unboldeda.'</b>';
}
$c = 'land of copper';
echo '<a href="#">'.strtr($c, $boldeda).'</a>';

说明:

你的行

echo '<a href="#">'.str_replace($a, $boldeda, $d=$c).'</a>';

$d$c str_replace会将值$a中的项目更改为$boldeda,这是操作$d=$c的结果。结果此分配为字符串land of copper,您的$d$c未触及。您可以通过输出来检查它们。

更进一步,在str_replace联机帮助页上,您会看到它有替换订单问题,它告诉您:

  

因为str_replace()从左向右替换,所以在进行多次替换时,它可能会替换先前插入的值。

因此,str_replace首先用标记取代la,标记中包含color, 第二个str_replace用新替换取代co。不幸的是,color一词co ,所以,str_replace也会替换它,因为它不会“记住”已经替换的内容,而不是

答案 1 :(得分:0)

您认为这部分是做什么的

$d

它将$c分配给showDiv的值,然后返回该值。

一次只做一件事