2011-11-24 16 views

risposta

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

http://php.net/substr_replace

+17

Questa dovrebbe essere la risposta accettata. Le funzioni integrate hanno la precedenza sulle funzioni create dall'utente ogni giorno. – Benjam

+8

Sì, il 4o argomento è "0" fa sì che la stringa di replaecment venga inserita senza sovrascrivere alcuna stringa originale. –

+5

Risposta brillante. Ma per i pigri (come me) dovrebbe esserci una breve spiegazione nel tuo post forse. Io lo farò adesso e copieremo il php.net: "Ovviamente, se la lunghezza è zero, questa funzione avrà l'effetto di inserire la sostituzione nella stringa allo spostamento iniziale specificato." – Wolfsblvt

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

substr on PHP Manual

+0

ho fatto una funzione str_insert con questa linea, è più riutilizzabile. – djleop

2
str_replace($sub_str, $insert_str.$sub_str, $org_str); 
+0

Non sostituirà ogni occorrenza? Inoltre, non è basato sull'indice ... – Ryan

+0

@minitech L'op ha detto "usando strpos per ottenere la posizione di una sottostringa", quindi la "sottostringa" viene prima. E non ha detto di trovare solo una posizione. – xdazz

7

Provalo, si lavorerà per qualsiasi numero di stringhe

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

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

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

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

Volevo solo aggiungere una cosa: ho trovato tim Cooper risposta molto utile, ho usato per rendere un metodo che accetta un array di posizioni e fa l'inserto su tutti ecco che è:

function stringInsert($str,$pos,$insertstr) 
{ 
    if (!is_array($pos)) 
     $pos=array($pos); 

    $offset=-1; 
     foreach($pos as $p) 
     { 
      $offset++; 
    $str = substr($str, 0, $p+$offset) . $insertstr . substr($str, $p+$offset); 
     } 
    return $str; 
} 
+0

Questo non funziona. Il tuo offset assume $ interstr per essere lungo solo 1 carattere. È necessario aggiungere l'offset a seconda della lunghezza di inserttstr, iniziare con 0 e aggiungere dopo il substr. Inoltre, dovresti ordinare le posizioni dal basso verso l'alto per farlo funzionare. Ho corretto la tua funzione qui, potresti voler modificare il tuo codice: http://pastebin.com/g9ADpuU4 –

1

Ho una mia vecchia funzione per quel:

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 

Questa è una piccola potente funzione che svolge il suo lavoro in modo impeccabile.

1

Questa era la mia soluzione semplice aggiungere testo alla riga successiva dopo aver trovato la parola chiave.

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

uscita:

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

utilizzare la funzione stringInsert piuttosto che la funzione putinplace. Stavo usando la funzione successiva per analizzare una query mysql. Sebbene l'output sia andato bene, la query ha generato un errore che mi ha richiesto un po 'di tempo per rintracciare. Quanto segue è la mia versione della funzione stringInsert che richiede un solo parametro.

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

Soluzione semplice. Buon lavoro. – jewelhuq

0

semplice e un altro modo per risolvere:

risposte
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

di strano! È possibile inserire facilmente stringhe in altre stringhe con sprintf [collegamento alla documentazione]. La funzione è estremamente potente e può gestire anche più elementi e altri tipi di dati.

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

ti dà la stringa

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

'$ posEnd' non è necessario. La domanda riguardava l'inserimento della sottostringa dopo la posizione specificata. – Styx

+0

Sì, ma ho creato questa funzione per il mio progetto. dove mi serviva in qualche posto in sostituzione e in un altro solo inserendo. La mia funzione funziona anche per questa domanda, quindi non capisco perché mi hai meno? –

Problemi correlati