web-dev-qa-db-ja.com

指定した位置に文字列を挿入

それができるPHP関数はありますか?

私は部分文字列の位置を取得するためにstrposを使っています、そしてその位置の後にstringを挿入したいのです。

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

http://php.net/substr_replace

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

PHP Manualのsubstr

70
Tim Cooper

それを試してみてください、それは任意の数の部分文字列のために働くでしょう

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

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

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

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

Putinplace関数ではなくstringInsert関数を使用してください。私はMySQLのクエリを解析するために後の関数を使用していました。出力は問題ないように見えましたが、クエリの結果エラーが発生し、追跡に時間がかかりました。以下は、1つのパラメータしか必要としない私のバージョンのstringInsert関数です。

function stringInsert($str,$insertstr,$pos)
{
    $str = substr($str, 0, $pos) . $insertstr . substr($str, $pos);
    return $str;
}  
7
user2958137
str_replace($sub_str, $insert_str.$sub_str, $org_str);
3
xdazz

私はそのための私の古い機能を1つ持っています:

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

これはその仕事を完璧に実行する小さな強力な機能です。

ちょうど何かを追加したいと思いました:私はtim cooperの答えが非常に有用であると思いました、私はポジションの配列を受け入れて、そしてそれらのすべてに挿入をするメソッドを作るためにそれを使いました。

編集:私の古い関数は$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;
}
3
chiliNUT

これは私の簡単な解決策でもあり、キーワードが見つかった後に次の行にテキストを追加します。

$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.
3
Lance Badger
function insSubstr($str, $sub, $posStart, $posEnd){
  return mb_substr($str, 0, $posStart) . $sub . mb_substr($str, $posEnd + 1);
}
1
Ivan Ivan

簡単で他の解決方法:

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;

}  
1
jewelhuq

ここに奇妙な答えが! sprintf [ドキュメントへのリンク]を使えば、他の文字列に簡単に文字列を挿入できます。この機能は非常に強力で、複数の要素や他のデータ型も扱うことができます。

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

あなたに文字列を渡します

I like green apples.
0
Sliq