为了账号安全,请及时绑定邮箱和手机立即绑定

替换尚未替换的字符串

替换尚未替换的字符串

PHP
梦里花落0921 2021-12-03 15:43:12
所以我有这样的文字:"word1 word2 word3 etc"我有一个带有一组替换物的数组,我必须像这样携带:[         "word1 word2" => "<a href="someurl">word1 word2</a>",     "word2"       => "<a href="someurl">word2</a>",     "word3"       => "<a href="someurl">word3</a>" ]基本上对于某些词(或它们的组合),我必须添加一些标签。我需要避免这种情况,因为“word1 word2”已经像这样被替换了:<a href="someurl">word1 word2</a> word3 etc我需要避免它变成这样:"<a href="someurl">word1 <a href="someurl">word2</a></a> word3 etc"                            ^^^ another replacement inside "word1 word2"如何避免替换已在其他替换中找到的较小字符串?使用 str_replace 的实时代码不起作用:$array = [         "word1 word2" => "<a href='someurl'>word1 word2</a>",     "word2"       => "<a href='someurl'>word2</a>",     "word3"       => "<a href='someurl'>word3</a>" ];$txt = "word1 word2 word3 etc";echo str_replace(array_keys($array),array_values($array),$txt);http://sandbox.onlinephpfunctions.com/code/85fd62e88cd0131125ca7809976694ee4c975b6b正确的输出:<a href="someurl">word1 word2</a> <a href="someurl">word3</a> etc
查看完整描述

3 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

尝试这个:


$array = [    

 "word1 word2" => "<a href='someurl'>word1 word2</a>",

 "word2"       => "<a href='someurl'>word2</a>",

 "word3"       => "<a href='someurl'>word3</a>" 

];


 $txt = "word1 word2 word3 etc";


foreach ($array as $word => $replacement) {

   if (!stripos($txt, ">$word<") && !stripos($txt, ">$word") && !stripos($txt, "$word<") ){

    $txt = str_replace($word, $replacement, $txt);

   }

}

echo $txt;


// output: <a href='someurl'>word1 word2</a> <a href='someurl'>word3</a> etc

基本上,在替换单词之前,请检查它是否已经包含在标签中


查看完整回答
反对 回复 2021-12-03
?
动漫人物

TA贡献1815条经验 获得超10个赞

不确定这是否是最好的解决方案,但您可以将单词的组合替换为完全不同的内容,然后在完成后将其替换回原来的形式。


例子


$array = [    

     "word1 word2" => "<a href='someurl'>***something***else***</a>",

     "word2"       => "<a href='someurl'>word2</a>",

     "word3"       => "<a href='someurl'>word3</a>",

];


$array2 = [    

     "***something***else***" => "word1 word2",

];


$txt = "word1 word2 word3 etc";

$txt = str_replace(array_keys($array),array_values($array),$txt);

$txt = str_replace(array_keys($array2),array_values($array2),$txt);


echo $txt;


查看完整回答
反对 回复 2021-12-03
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

也许在一组替换数组的键上添加“空格”并执行str_replace()。可能是这样的:


<?php

    //Enter your code here, enjoy!


    $array = [    

         "word1 word2 " => "<a href='someurl'>word1 word2</a>",

         "word2 "       => "<a href='someurl'>word2</a>",

         "word3 "       => "<a href='someurl'>word3</a>" 

    ];


    $txt = "word1 word2 word3 etc";


    echo str_replace(array_keys($array),array_values($array),$txt." ");


查看完整回答
反对 回复 2021-12-03
  • 3 回答
  • 0 关注
  • 224 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信