在指定位置插入字符串

时间:2011-11-24 02:01:39

标签: php string

是否有PHP功能可以做到这一点?

我正在使用strpos来获取子字符串的位置,我想在该位置之后插入string

11 个答案:

答案 0 :(得分:486)

$newstr = substr_replace($oldstr, $str_to_insert, $pos, 0);

http://php.net/substr_replace

答案 1 :(得分:70)

$str = substr($oldstr, 0, $pos) . $str_to_insert . substr($oldstr, $pos);

substr on PHP Manual

答案 2 :(得分:9)

尝试一下,它适用于任意数量的子串

<?php
    $string = 'bcadef abcdef';
    $substr = 'a';
    $attachment = '+++';

    //$position = strpos($string, 'a');

    $newstring = str_replace($substr, $substr.$attachment, $string);

    // bca+++def a+++bcdef
?>

答案 3 :(得分:7)

使用stringInsert函数而不是putinplace函数。我使用后来的函数来解析mysql查询。虽然输出看起来不错,但是查询导致了一个错误,我花了一些时间来追踪。以下是我的stringInsert函数版本,只需要一个参数。

function stringInsert($str,$insertstr,$pos)
{
    $str = substr($str, 0, $pos) . $insertstr . substr($str, $pos);
    return $str;
}  

答案 4 :(得分:3)

str_replace($sub_str, $insert_str.$sub_str, $org_str);

答案 5 :(得分:3)

只是想添加一些东西:我发现蒂姆库珀的答案非常有用,我用它来制作一个接受一系列位置的方法,并在所有这些方面插入,所以这就是:

编辑: 看起来我的旧函数假设$insertstr只有1个字符并且数组已经排序。这适用于任意字符长度。

function stringInsert($str, $pos, $insertstr) {
    if (!is_array($pos)) {
        $pos = array($pos);
    } else {
        asort($pos);
    }
    $insertionLength = strlen($insertstr);
    $offset = 0;
    foreach ($pos as $p) {
        $str = substr($str, 0, $p + $offset) . $insertstr . substr($str, $p + $offset);
        $offset += $insertionLength;
    }
    return $str;
}

答案 6 :(得分:3)

我有一个旧功能:

function putinplace($string=NULL, $put=NULL, $position=false)
{
    $d1=$d2=$i=false;
    $d=array(strlen($string), strlen($put));
    if($position > $d[0]) $position=$d[0];
    for($i=$d[0]; $i >= $position; $i--) $string[$i+$d[1]]=$string[$i];
    for($i=0; $i<$d[1]; $i++) $string[$position+$i]=$put[$i];
    return $string;
}

// Explanation
$string='My dog dont love postman'; // string
$put="'"; // put ' on position
$position=10; // number of characters (position)
print_r( putinplace($string, $put, $position) ); //RESULT: My dog don't love postman

这是一个功能强大的小功能,可以完美地完成工作。

答案 7 :(得分:3)

这是我的简单解决方案,在找到关键字后,也将文字附加到下一行。

$oldstring = "This is a test\n#FINDME#\nOther text and data.";

function insert ($string, $keyword, $body) {
   return substr_replace($string, PHP_EOL . $body, strpos($string, $keyword) + strlen($keyword), 0);
}

echo insert($oldstring, "#FINDME#", "Insert this awesome string below findme!!!");

输出:

This is a test
#FINDME#
Insert this awesome string below findme!!!
Other text and data.

答案 8 :(得分:1)

简单和另一种解决方法:

function stringInsert($str,$insertstr,$pos)
{
  $count_str=strlen($str);
  for($i=0;$i<$pos;$i++)
    {
    $new_str .= $str[$i];
    }

    $new_str .="$insertstr";

   for($i=$pos;$i<$count_str;$i++)
    {
    $new_str .= $str[$i];
    }

  return $new_str;

}  

答案 9 :(得分:1)

function insSubstr($str, $sub, $posStart, $posEnd){
  return mb_substr($str, 0, $posStart) . $sub . mb_substr($str, $posEnd + 1);
}

答案 10 :(得分:0)

这里有奇怪的答案!您可以使用sprintf [链接到文档]轻松地将字符串插入到其他字符串中。该功能非常强大,可以处理多个元素和其他数据类型。

<script type="text/javascript">
    $.get('path/upload.csv', function(data) {
    var build = '<table border="1" cellpadding="2" cellspacing="0" style="border-collapse: collapse" width="100%">\n';
    //var rows = data.split("\n");
    //rows.forEach( function getvalues(thisRow) {
    var head = data.split("\n");
    for(var i=2;i<3;i++){
    build += "<tr><th>" + head[i].replace("first seen", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;seen") + "</th></tr>";
    //build += "<tr>";
            //var col = data.split("\n");   
            for(var i=3;i<head.length;i++){
            build += "<tr><td>" + head[i].split("\n") + "</td></tr>";
            }               
    }
    build += "</table>";
        $('#wrap').append(build);   
    });
</script>

为您提供字符串

$color = 'green';
sprintf('I like %s apples.', $color);