To powinna być zaakceptowana odpowiedź. Wbudowane funkcje mają pierwszeństwo przed funkcjami tworzonymi przez użytkownika każdego dnia.
Benjam
13
Tak, czwarty argument będący „0” powoduje, że łańcuch replaecmentu jest wstawiany bez nadpisywania oryginalnego łańcucha.
Buttle Butkus
7
Genialna odpowiedź. Ale dla leniwych ludzi (takich jak ja) może być krótkie wyjaśnienie w twoim poście. Zrobię to teraz i skopiuj i wklej z php.net: „Oczywiście, jeśli długość wynosi zero, to funkcja ta spowoduje wstawienie zamiany do łańcucha przy danym przesunięciu początkowym.”
Wolfsblvt
7
Uwaga: funkcja substr_replace () nie jest bezpieczna dla wielu bajtów! Twój $ pos może być w środku znaku UTF-8. Być może będziesz musiał zastosować rozwiązanie @ tim-cooper, ale używając mb_substr ().
Użyj funkcji stringInsert zamiast funkcji putinplace. Użyłem późniejszej funkcji do analizy zapytania mysql. Mimo że wynik wyglądał dobrze, zapytanie spowodowało błąd, którego wyśledzenie zajęło mi trochę czasu. Oto moja wersja funkcji stringInsert wymagającej tylko jednego parametru.
@minitech Op powiedział using strpos to get the position of a substring, więc substringjest na pierwszym miejscu. I nie powiedział, żeby znaleźć tylko jedną pozycję.
xdazz 24.11.11
3
Mam do tego jedną moją starą funkcję:
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
Jest to niewielka, potężna funkcja, która wykonuje swoją pracę bezbłędnie.
Chciałem tylko coś dodać: uznałem odpowiedź Tim Coopera za bardzo przydatną, wykorzystałem ją do stworzenia metody, która akceptuje tablicę pozycji i wstawia na nich wszystkie, więc oto:
EDYCJA: Wygląda na to, że moja stara funkcja$insertstrmiała tylko 1 znak i że tablica została posortowana. Działa to dla dowolnej długości znaków.
To nie działa. Przesunięcie zakłada, że $ interstr ma tylko 1 znak. Musisz dodać przesunięcie w zależności od długości insertstr, zacząć od 0 i dodać po substr. Ponadto należy posortować pozycje od najniższej do najwyższej, aby działało. Poprawiłem tutaj twoją funkcję, możesz chcieć edytować kod: pastebin.com/g9ADpuU4
Matthias S
@MatthiasS dzięki, następnym razem po prostu edytuj lub sugeruj edycję, nie zauważyłem tego do 2 lat później
$posEndjest niepotrzebny. Pytanie dotyczyło wstawienia podciągu po określonej pozycji.
Styx
Tak, ale stworzyłem tę funkcję dla mojego projektu. gdzie w niektórych miejscach potrzebowałem wymiany, aw innym właśnie wstawienia. Moja funkcja również działa na to pytanie, więc nie mogę zrozumieć, dlaczego mnie pominęłeś?
Ivan Ivan
0
Dziwne odpowiedzi tutaj! Możesz łatwo wstawiać ciągi do innych ciągów za pomocą sprintf [link do dokumentacji]. Ta funkcja jest niezwykle wydajna i może obsługiwać wiele elementów oraz inne typy danych.
$color ='green';
sprintf('I like %s apples.', $color);
To miłe. ale nie obsługuje podejścia programowego. Zwykle mamy 'I like apples.'jako zmienną. Musimy więc wstawić %spierwszy ciąg, który powraca do pierwotnego problemu
substr
na PHP Manualźródło
Wypróbuj, będzie działać na dowolnej liczbie podciągów
źródło
Użyj funkcji stringInsert zamiast funkcji putinplace. Użyłem późniejszej funkcji do analizy zapytania mysql. Mimo że wynik wyglądał dobrze, zapytanie spowodowało błąd, którego wyśledzenie zajęło mi trochę czasu. Oto moja wersja funkcji stringInsert wymagającej tylko jednego parametru.
źródło
źródło
using strpos to get the position of a substring
, więcsubstring
jest na pierwszym miejscu. I nie powiedział, żeby znaleźć tylko jedną pozycję.Mam do tego jedną moją starą funkcję:
Jest to niewielka, potężna funkcja, która wykonuje swoją pracę bezbłędnie.
źródło
To było moje proste rozwiązanie - po znalezieniu słowa kluczowego dodaj tekst do następnego wiersza.
Wynik:
źródło
Chciałem tylko coś dodać: uznałem odpowiedź Tim Coopera za bardzo przydatną, wykorzystałem ją do stworzenia metody, która akceptuje tablicę pozycji i wstawia na nich wszystkie, więc oto:
EDYCJA: Wygląda na to, że moja stara funkcja
$insertstr
miała tylko 1 znak i że tablica została posortowana. Działa to dla dowolnej długości znaków.źródło
Prosty i inny sposób rozwiązania:
źródło
źródło
$posEnd
jest niepotrzebny. Pytanie dotyczyło wstawienia podciągu po określonej pozycji.Dziwne odpowiedzi tutaj! Możesz łatwo wstawiać ciągi do innych ciągów za pomocą sprintf [link do dokumentacji]. Ta funkcja jest niezwykle wydajna i może obsługiwać wiele elementów oraz inne typy danych.
daje ci ciąg
źródło
'I like apples.'
jako zmienną. Musimy więc wstawić%s
pierwszy ciąg, który powraca do pierwotnego problemu