Masukkan string pada posisi yang ditentukan

270

Apakah ada fungsi PHP yang bisa melakukan itu?

Saya menggunakan strposuntuk mendapatkan posisi substring dan saya ingin memasukkan stringsetelah posisi itu.

Alex
sumber

Jawaban:

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

http://php.net/substr_replace

urmaul
sumber
24
Ini harus menjadi jawaban yang diterima. Fungsi bawaan lebih diutamakan daripada fungsi yang dibuat pengguna setiap hari.
Benjam
13
Ya, argumen ke-4 menjadi "0" menyebabkan string replaecment dimasukkan tanpa menimpa salah satu string asli.
Buttle Butkus
7
Jawaban yang brilian. Tetapi untuk orang-orang malas (seperti saya) harus ada penjelasan singkat di posting Anda mungkin. Saya akan melakukannya sekarang dan menyalin'n'paste dari php.net: "Tentu saja, jika panjangnya nol maka fungsi ini akan memiliki efek memasukkan penggantian ke dalam string pada awal offset yang diberikan."
Wolfsblvt
7
Hati-hati: Fungsi substr_replace () tidak aman multibyte! $ Pos Anda mungkin berubah di tengah karakter UTF-8. Anda mungkin perlu menggunakan solusi @ tim-cooper tetapi menggunakan mb_substr ().
richplane
72
$str = substr($oldstr, 0, $pos) . $str_to_insert . substr($oldstr, $pos);

substr pada Manual PHP

Tim Cooper
sumber
Saya membuat fungsi str_insert dengan baris ini, itu lebih dapat digunakan kembali.
djleop
12

Cobalah, ini akan berfungsi untuk sejumlah substring

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

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

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

    // bca+++def a+++bcdef
?>
alexdets
sumber
7

Gunakan fungsi stringInsert daripada fungsi putinplace. Saya menggunakan fungsi selanjutnya untuk mem-parsing permintaan mysql. Meskipun output tampak baik-baik saja, kueri menghasilkan kesalahan yang membutuhkan waktu beberapa saat untuk melacak. Berikut ini adalah versi saya dari fungsi stringInsert yang hanya membutuhkan satu parameter.

function stringInsert($str,$insertstr,$pos)
{
    $str = substr($str, 0, $pos) . $insertstr . substr($str, $pos);
    return $str;
}  
pengguna2958137
sumber
4
str_replace($sub_str, $insert_str.$sub_str, $org_str);
xdazz
sumber
@minitech op mengatakan using strpos to get the position of a substring, jadi yang substringpertama datang. Dan dia tidak mengatakan hanya menemukan satu posisi.
xdazz
3

Saya punya satu fungsi lama untuk itu:

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

Ini adalah fungsi kecil yang kuat yang melakukan tugasnya dengan sempurna.

Ivijan Stefan Stipic
sumber
3

Ini adalah solusi sederhana saya juga menambahkan teks ke baris berikutnya setelah menemukan kata kunci.

$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!!!");

Keluaran:

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

Hanya ingin menambahkan sesuatu: Saya menemukan jawaban tim cooper sangat berguna, saya menggunakannya untuk membuat metode yang menerima berbagai posisi dan melakukan penyisipan pada semuanya jadi di sini yaitu:

EDIT: Sepertinya fungsi lama saya diasumsikan$insertstrhanya 1 karakter dan array diurutkan. Ini berfungsi untuk panjang karakter sewenang-wenang.

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;
}
cabeNUT
sumber
1
Ini tidak bekerja. Offset Anda mengasumsikan $ interstr hanya sepanjang 1 karakter. Anda perlu menambahkan offset tergantung pada panjang insertstr, mulai dengan 0 dan tambahkan setelah substr. Selanjutnya Anda harus mengurutkan posisi rendah ke tinggi untuk membuatnya berfungsi. Saya mengoreksi fungsi Anda di sini, Anda mungkin ingin mengedit kode Anda: pastebin.com/g9ADpuU4
Matthias S
@Matthias terima kasih, lain kali edit atau saran edit, saya tidak melihat ini sampai 2 tahun kemudian
chiliNUT
1

Sederhana dan cara lain untuk menyelesaikan:

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;

}  
permata
sumber
mungkin juga menyatakan bagaimana fungsi tersebut digunakan?
Rotimi
1
function insSubstr($str, $sub, $posStart, $posEnd){
  return mb_substr($str, 0, $posStart) . $sub . mb_substr($str, $posEnd + 1);
}
Ivan Ivan
sumber
$posEndtidak dibutuhkan. Pertanyaannya adalah tentang memasukkan substring setelah posisi yang ditentukan.
Styx
Ya, tetapi saya membuat fungsi ini untuk proyek saya. di mana saya perlu di suatu tempat mengganti dan di lain hanya menyisipkan. Fungsi saya juga berfungsi untuk pertanyaan ini, jadi saya tidak mengerti mengapa Anda mengurangi saya?
Ivan Ivan
0

Jawaban aneh di sini! Anda dapat memasukkan string ke string lain dengan mudah dengan sprintf [tautan ke dokumentasi]. Fungsi ini sangat kuat dan dapat menangani banyak elemen dan tipe data lainnya juga.

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

memberi Anda string

I like green apples.
Sliq
sumber
1
Itu bagus. tetapi tidak menangani pendekatan terprogram. Kami biasanya memiliki 'I like apples.'variabel. Jadi kita harus memasukkan %sdulu ke dalam string, yang kembali ke masalah semula
KeitelDOG