douweinu8562 2018-01-14 15:57
浏览 114
已采纳

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

I'm trying to insert text to string at certain positions (before letter "b" in this case), but for some reason the code I have only insert text (" test ")at the last position/occurance.

<?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;
?>`

this produces the following output: aabaaaaabaaaaa test b when the desired one whould be: aa test aaaaa test aaaaa test b

  • 写回答

4条回答 默认 最新

  • dongnaota6386 2018-01-14 16:17
    关注

    You use $str as input for substring_replace, but you don't modify $str anywhere. Obviously only the last replacement will show. You can, for example, use $newstring as input for substring_replace, but then you positions are no longer correct. This can be avoided by making the replacements from right to left:

    //snip
    
    $newstring = $str;
    for ($i = count($positions) - 1; $i >= 0; $i--) {
      $newstring = substr_replace($newstring, $teststr, $positions[$i], 0);
    }
    
    echo $newstring;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 关于无人驾驶的航向角
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退