Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: funkcja tekstowa
Forum PHP.pl > Forum > PHP
jol.us_
Jest funkcja:
Kod
substr_replace($string, 'slowo', 5, 10)

ktora miedzy 5 a 10 znakiem wpisuje "slowo" w miejsce istniejacych.

Czy jest jakas funkcja (jesli tak to jaka) ktora robi to samo tylko ze zamiast nr znaku mozna tam wpisac fraze, czyli realizowalaby taki algorytm:
miedzy zlowem A i B skasuj wszystko a w to miejsce wstaw slowo C

przy czym slowo A i B to rozne stringi.
marlowe
Powinno się to zrobić za pomocą wyrażeń reguralnych ale 1. nie wychodzi coś mi to ;-) 2. podobno nie należy nadużywać regexp bo dłużej się wykonują. W każdym razie można to zrobić tak:
  1. <?php
  2. $string = &#092;"To jest dość ładny ciąg\"; //początkowy ciąg
  3. $short_string1 = &#092;"jest\"; //pierwszy podciąg
  4. $short_string2 = &#092;"ładny\";//drugi podciąg
  5.  
  6. $my_short_string = &#092;" bardzo \";//podciąg do zamiany
  7.  
  8. $new_string1 = explode($short_string1, $string); /* $new_string1[0] zawiera teraz \"To \" */
  9. $new_string2 = explode($short_string2, $string); /* $new_string2[1] zawiera teraz \" ciąg\" */
  10. $new_string = $new_string1[0].$short_string1.$my_short_string.$short_string1.$new_string2[1];
  11. echo $new_string;//zwraca: \"To jest bardzo łądny ciąg\"
  12. ?>

Pozdrawiam.
Bartek
jol.us_
Probowalem to robic na wyrazeniach reguralnych ale mi tez cos nie wychodzi.

Przy okazji, jedna linijka ma blad, tak chyba jest poprawnie:
Kod
$new_string1[0].$short_string1.$my_short_string.$short_string2.$new_string2[1];


Jednak nie do konca mi o to chodzilo [moja wina bo nie napisalem]. Dane pary slow [A i B] moga wystepowac w frazie wielokrotnie i chcialbym zamieniac wszystkie. Przy czym slowo B wystepuje rowniez oddzielnie.

Algorytm mialby wygladac jakos tak:
- znajdz slowo A
- znajdz pierwsze slowo B [wystepujace po A]
- skasuj wszystko miedzy A i B
- wstaw slowo C [miedzy A i B]
- znajdz nastepne slowo A
- itd. az do konca stringu
Dabroz
  1. <?php
  2.  
  3. //a i b nie mogą zawierać pewnych znaków (trzeba je wtedy zescape'ować)
  4.  
  5. $text = preg_replace('#'.$a.'(.*?)'.$b.'#si',$a.$c.$b,$text);
  6.  
  7.  
  8. ?>
jol.us_
POEZJA biggrin.gif

O to mi chodzilo. Sliczne dzieki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.