插入字符串到干草堆'每当& # 39;针# 39;找到了,把干草堆重新拼起来


Insert string into 'haystack' whenever 'needle' is found and put the haystack back together

<?php  
    $name = "Peter_Piper";
    // %name% is placeholder for $name
    $rhyme = "%name% picked a peck of pickled peppers.
              A peck of pickled peppers %name% picked.
              If %name% picked a peck of pickled peppers,
              Where's the peck of pickled peppers %name% picked?";
          strpos($rhyme,'%name%');   
          $split = explode("%name%", $rhyme);
          $rhyme  = $split[0];                                          
          $rhyme .= $name;
          $rhyme .= $split[1];
          $rhyme .= $name;
          $rhyme .= $split[2];
          $rhyme .= $name;
          $rhyme .= $split[3];
          $rhyme .= $name;
          $rhyme .= $split[4]; 

    echo $rhyme;
    ?>

上面的例子准确地描述了我要做的事情。

然而,它只工作,因为我知道多少次"Peter_Piper"出现。因为我不知道%name%会出现多少次(如果有的话),所以需要循环。

    <?php
$name = "Peter_Piper";
$rhyme = "%name% picked a peck of pickled peppers.
          A peck of pickled peppers %name% picked.
          If %name% picked a peck of pickled peppers,
          Where's the peck of pickled peppers %name% picked?";
      strpos($rhyme,'%name%');   
      $split = explode("%name%", $rhyme);
foreach ($split as $item) {
  echo "$item";
}

?>

现在我有了大部分的押韵,但"Peter_Piper"不见了。我明白为什么彼得派珀不见了。我就是不知道怎么插入名字。

也许使用str_replace?

str_replace("%name%", $name, $rhyme);

也许您正在寻找preg_replace

preg_replace('/(%name%)/ug', $name, $rhyme);

或者将%name%$rhyme中的位置改为%1$s,然后调用

sprintf($rhyme, $name);

常用的是as well

str_replace("%name%", $name, $rhyme);