Essa deve ser a resposta aceita. As funções internas têm precedência sobre as funções criadas pelo usuário a qualquer dia.
Benjam
13
Sim, o quarto argumento sendo "0" faz com que a cadeia de reposição seja inserida sem substituir nenhuma da cadeia original.
Buttle Butkus
7
Resposta brilhante. Mas para pessoas preguiçosas (como eu) talvez deva haver uma breve explicação em seu post. Vou fazer agora e copiar e colar do php.net: "Claro que, se o comprimento for zero, esta função terá o efeito de inserir a substituição na string no deslocamento inicial especificado".
precisa saber é o seguinte
7
Cuidado: A função substr_replace () não é multibyte segura! Seu $ pos pode estar no meio de um caractere UTF-8. Pode ser necessário empregar a solução do @ tim-cooper, mas usando mb_substr ().
Use a função stringInsert em vez da função putinplace. Eu estava usando a função posterior para analisar uma consulta mysql. Embora a saída parecesse correta, a consulta resultou em um erro que levou um tempo para ser rastreado. A seguir, minha versão da função stringInsert que requer apenas um parâmetro.
@minitech O op disse using strpos to get the position of a substring, então o que substringvem primeiro. E ele não disse que encontrasse apenas uma posição.
Xdazz
3
Eu tenho uma minha função antiga para isso:
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
Essa é uma função pequena e poderosa que executa seu trabalho na perfeição.
Só queria acrescentar algo: achei a resposta de tim cooper muito útil, usei-a para criar um método que aceita uma matriz de posições e faz a inserção em todas elas, então aqui está:
EDIT: Parece que minha função antiga assumida$insertstrtinha apenas 1 caractere e que a matriz foi classificada. Isso funciona para caracteres arbitrários.
Isso não funciona. Seu deslocamento supõe que $ interstr tenha apenas 1 caractere. Você precisa adicionar deslocamento, dependendo do comprimento da inserção, começar com 0 e adicionar após o substr. Além disso, você deve classificar as posições de baixo a alto para fazê-lo funcionar. Corrigi sua função aqui, convém editar seu código: pastebin.com/g9ADpuU4
Matthias S
@MatthiasS graças, da próxima vez apenas editar ou editar sugeriu, eu não perceber isso até 2 anos mais tarde
$posEndé desnecessário. A questão era sobre a inserção de substring após a posição especificada.
Styx
Sim, mas eu fiz essa função para o meu projeto. onde eu precisava em algum lugar substituindo e em outro apenas inserindo. Minha função também está funcionando para essa pergunta, então não consigo entender por que você me menosou?
Ivan Ivan
0
Respostas estranhas aqui! Você pode inserir strings em outras strings facilmente com o sprintf [link para documentação]. A função é extremamente poderosa e também pode lidar com vários elementos e outros tipos de dados.
$color ='green';
sprintf('I like %s apples.', $color);
Isso é bom. mas não lida com uma abordagem programática. Geralmente temos 'I like apples.'como variável. Portanto, temos que inserir %sprimeiro a string, que retorna ao problema original #
substr
no manual do PHPfonte
Experimente, ele funcionará para qualquer número de substrings
fonte
Use a função stringInsert em vez da função putinplace. Eu estava usando a função posterior para analisar uma consulta mysql. Embora a saída parecesse correta, a consulta resultou em um erro que levou um tempo para ser rastreado. A seguir, minha versão da função stringInsert que requer apenas um parâmetro.
fonte
fonte
using strpos to get the position of a substring
, então o quesubstring
vem primeiro. E ele não disse que encontrasse apenas uma posição.Eu tenho uma minha função antiga para isso:
Essa é uma função pequena e poderosa que executa seu trabalho na perfeição.
fonte
Esta foi minha solução simples, acrescentando também o texto à próxima linha depois que ela encontrou a palavra-chave.
Resultado:
fonte
Só queria acrescentar algo: achei a resposta de tim cooper muito útil, usei-a para criar um método que aceita uma matriz de posições e faz a inserção em todas elas, então aqui está:
EDIT: Parece que minha função antiga assumida
$insertstr
tinha apenas 1 caractere e que a matriz foi classificada. Isso funciona para caracteres arbitrários.fonte
Simples e outra maneira de resolver:
fonte
fonte
$posEnd
é desnecessário. A questão era sobre a inserção de substring após a posição especificada.Respostas estranhas aqui! Você pode inserir strings em outras strings facilmente com o sprintf [link para documentação]. A função é extremamente poderosa e também pode lidar com vários elementos e outros tipos de dados.
dá-lhe a corda
fonte
'I like apples.'
como variável. Portanto, temos que inserir%s
primeiro a string, que retorna ao problema original #