这是php的一个bug吗?你会怎样';补丁';信息技术
我正在用php处理这个简单的脚本:这是php的一个bug吗?你会怎样';补丁';信息技术,php,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>'; $a=arra
$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>';
$a=array('la','co');
foreach($a作为$unboldeda){
$boldeda[]='.$unboldeda';
}
$c=‘铜之地’;
回声';
这将导致
landcopper
但其结果是:
color:teal;“copper之地
因为str_replace()不仅替换了$d的值,而且还替换了$c的值,因此在第二次迭代中,$c还将包含html标记。在我看来,这对编程语言来说没有多大意义。您如何解决这一问题?您认为这一部分的作用是什么
$d=$c
它将$d
赋值给$c
的值,然后返回该值
一次只做一件事你认为这部分做什么
$d=$c
它将$d
赋值给$c
的值,然后返回该值
一次只做一件事使用
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>';
$a=array('la','co');
foreach($a作为$unboldeda){
$boldeda[$unboldeda]='.$unboldeda'.';
}
$c=‘铜之地’;
回声';
说明:
你的线路
echo '<a href="#">'.str_replace($a, $boldeda, $d=$c).'</a>';
echo';
与$d
或$c
无关。
str_replace
将值中的项目从$a
更改为$boldeda
,这是操作的结果$d=$c
。此分配的结果是字符串铜地,您的$d
和$c都是未触及的。您可以通过输出它们来检查这一点。
更进一步,在str_replace
手册页上,您将看到它有替换顺序gotcha,它告诉您:
因为str_replace()从左向右替换,所以在执行多次替换时,它可能会替换以前插入的值
因此,str\u replace
首先将la
替换为标签,标签中有颜色
,
第二个str\u replace
用一个新的替换物替换co
。不幸的是,wordcolor
也有co
,因此,stru replace
也替换了它,因为它不“记住”已经替换的内容和没有替换的内容。strtrtrtrtr>的解决方案:
$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>';
$a=array('la','co');
foreach($a作为$unboldeda){
$boldeda[$unboldeda]='.$unboldeda'.';
}
$c=‘铜之地’;
回声';
说明:
你的线路
echo '<a href="#">'.str_replace($a, $boldeda, $d=$c).'</a>';
echo';
与$d
或$c
无关。
str_replace
将值中的项目从$a
更改为$boldeda
,这是操作的结果$d=$c
。此分配的结果是字符串铜地,您的$d
和$c
都是未触及的。您可以通过输出它们来检查这一点。
更进一步,在str_replace
手册页上,您将看到它有替换顺序gotcha,它告诉您:
因为str_replace()从左向右替换,所以在执行多次替换时,它可能会替换以前插入的值
因此,str\u replace
首先将la
替换为标签,标签中有颜色
,
第二个str\u replace
用一个新的替换物替换co
。不幸的是,单词color
也有co
,所以,str\u replace
也替换了它,因为它不“记住”“什么已经被替换,什么没有被替换。替换为strtr
此行为在该功能的手册页上得到警告:至于为什么,替代方案更难实现。请告诉我您所指的贡献者的姓名或贡献者的号码?谢谢:-)替换为strtr
此行为在该功能的手册页上有警告:至于为什么,替代方案更难实现。请告诉我您所指的贡献者姓名或贡献者编号?谢谢:-)当我把$d=$c放在外面,只把$d放在里面时也是一样的_replace@G.ManJi-那也一样。这与将$c
传递给str_replace()完全相同。根本没有理由涉及到$d
。当我把$d=$c放在外面,把$d放在里面时也是一样的_replace@G.ManJi-那也一样。这与将$c
传递给str_replace()完全相同。根本没有理由涉及$d
。不幸的是,这会导致$boldeda不再粗体或样式化:-(boldela
是数组。幸运的是,它是我知道的,但我听不懂你说的。我该怎么办?@G.ManJi u_mulder的答案有什么问题?它很有效。不,不,u_mulder的答案是可以的,现在我已经理解了。我没有看到这个修改$boldeda[$unboldda]-它现在可以工作不幸的是它不能工作,它导致$boldeda不再粗体或样式化:-(boldela
是数组。幸运的是,它是我知道的,但我不能理解。我应该怎么做?@G.ManJi u\u mulder的答案有什么问题吗?它可以工作。不,u\u mulder的答案没问题,现在我已经理解了。我没有看到这个修改$boldeda[$unboldda]-现在可以用了