PHP在某些位置将字符串添加到字符串-issue

时间:2018-01-14 15:57:25

标签: php string substr

我试图在某些位置插入文本字符串(在字母" b"在这种情况下)之前,但由于某种原因,代码我只插入文本(" test ")在最后一个位置/发生。

<?php
$str = "aabaaaaabaaaaab";
$needle = "b";
$teststr = " test ";
$lastPos = 0;
$positions = array();


while (($lastPos = strpos($str, $needle, $lastPos))!== false) {
$positions[] = $lastPos;
$lastPos = $lastPos + strlen($needle);
}

for ($i=0;$i<count($positions);$i++) {
$newstring = substr_replace($str,$teststr,$positions[$i],0);
}

echo $newstring;
?>`

这会产生以下输出:aabaaaaabaaaaa test b 当所需的一个是:aa测试aaaaa测试aaaaa测试b

4 个答案:

答案 0 :(得分:1)

您使用$str作为substring_replace的输入,但不要在任何地方修改$str。显然只会显示最后一次更换。例如,您可以使用$newstring作为substring_replace的输入,但随后您的排名不再正确。通过从右到左进行替换可以避免这种情况:

//snip

$newstring = $str;
for ($i = count($positions) - 1; $i >= 0; $i--) {
  $newstring = substr_replace($newstring, $teststr, $positions[$i], 0);
}

echo $newstring;

答案 1 :(得分:0)

正则表达式适合你吗?

<?php
$str = "aabaaaaabaaaaab";
echo preg_replace('~b~', ' test b', $str);

答案 2 :(得分:0)

$str = "aabaaaaabaaaaab";
$needle = "b";
$teststr = " test ";
$lastPos = 0;
$positions = explode($needle, $str);
foreach($positions as $k=>$v) {
    $positions[$k]=$v.$teststr.$needle;
}
$positions=implode($positions);
echo $positions;

试试这个

答案 3 :(得分:0)

以下应该工作

$str = "aabaaaaabaaaaab";
$needle = "b";
$teststr = " test ";

for ($i=0;$i<strlen($str);$i++) {
    if($str[$i]==$needle ){
        echo $teststr.$str[$i]; 
    }else{
        echo $str[$i];
    }
}

echo $newstring;

**Output** 
aa test baaaaa test baaaaa test b