Ĺadny brzuch
Witam
Mam pytanie. Pobieram sobie z forma albo z bazy pewien ciąg znaków np."Ala ma kota" i pakuje go do zmiennej. Jak zamienić w tym ciągu znaków wszystkie litery "a" na np. litery "b"?? Z góry dziękuje za odpowiedz :)
Może np. za pomocą funkcji str_replace(), str_ireplace(), substr_replace()? :>
Może np. za pomocą funkcji str_replace(), str_ireplace(), substr_replace()? :>
hmmm, chyba raczej nie o to mi chodzilo...
No to polecam lekturę http://pl.php.net/ma...str-replace.php ;)
No to polecam lekturę http://pl.php.net/ma...str-replace.php ;)
Ok, dzieki, przydalo sie.
Najlepiej za pomoca wyrażeń regularnych funkcje:
ereg_replace()
lub
eregi_replace()
...chyba się spóźniłem ;)
Użytkownik Mumas edytował ten post 26 luty 2008, 19:05
...
...chyba się spóźniłem ;)
E, nie, o wyrażeniach regularnych jeszcze nie było :D Ale nie wiem, czy to nie jest w tym wypadku strzelanie z armaty do komara ;)
Wszystko dziabie, jakby ktoś kiedyś szukał to wsadzam gotowca:
<? $ciag = "ala ma kota"; $kodowane = array("a"); $rozkodowane = array("b"); $wynik = str_replace($kodowane, $rozkodowane, $ciag); echo ($wynik); ?>
E, nie, o wyrażeniach regularnych jeszcze nie było :D Ale nie wiem, czy to nie jest w tym wypadku strzelanie z armaty do komara ;)
dokladnie, to jest strzelanie - wyrazenia regularne sa wyraznie wolniejsze. nawet w manualu php pisze ze lepiej korzystac z prostych funkcji jak podane wczesniej.
A jeszcze mam jedno pytanko, tylko odbiegające od tematu, ale także dotyczy formatu ciągu znaków. A wiec, mam w zmiennej jakiś ciąg "abcdefgh". Moje pytanie - czy istnieje funkcja, która oddzieli znaki tak, żeby szły dwójkami np."ab cd ef gh"? Coś żeby wstawiało spacje po 2 znakach?
Cóż? Najszybciej to chyba pętlą.$ciagznakow=(string)$ciagznakow; for ($i=0,$i=strlen($ciagznakow),$i+=2) echo $ciagznakow[$i].$ciagznakow[$i+1].' ';Możesz też zrobić z tego tablicę i użyć array_chunk. Ale pierwszy sposób chyba jest łatwiejszy i szybszy.
http://pl2.php.net/m...n.str-split.php
Użytkownik andrzej_aa edytował ten post 27 luty 2008, 10:41
dokladnie, to jest strzelanie - wyrazenia regularne sa wyraznie wolniejsze. nawet w manualu php pisze ze lepiej korzystac z prostych funkcji jak podane wczesniej.
Dlaczego wyrazenia regularne mialyby byc wolniejsze.. Oba rodzaje przetwarzania maja liniowa zlozonosc i zaleza tylko od dlugosci stringa...? No chyba ze w php to jest jakos inaczej zaimplementowane...
Czy ktos wie cos wiecej na ten temat?
Cóż? Najszybciej to chyba pętlą.$ciagznakow=(string)$ciagznakow; for ($i=0,$i=strlen($ciagznakow),$i+=2) echo $ciagznakow[$i].$ciagznakow[$i+1].' ';Możesz też zrobić z tego tablicę i użyć array_chunk. Ale pierwszy sposób chyba jest łatwiejszy i szybszy.
http://pl2.php.net/m...n.str-split.php
Tutaj troche bledow w kodzie, probowalem naprawic dajac kod
$ciag=(string)$ciag; for ($i=0; $i=strlen($ciag); $i+=2) { echo $ciag[$i].$ciag[$i+1].' '; }
Ale i tak zwraca blad :/ Moze ja cos zle robie?
Pisałem na telefonie, więc mogły się wkraść błędy. OK, inaczej$tab=str_split($ciag,2); echo implode(' ',$tab);
Dlaczego wyrazenia regularne mialyby byc wolniejsze.. Oba rodzaje przetwarzania maja liniowa zlozonosc i zaleza tylko od dlugosci stringa...? No chyba ze w php to jest jakos inaczej zaimplementowane...
Czy ktos wie cos wiecej na ten temat?
A kto powiedział, że wyrażenia regularne mają taką samą złożoność jak "zwykłe" przeszukiwanie i zależą tylko od długości stringa? Obecność symboli wieloznacznych powoduje, że to nie jest proste sprawdzenie znak po znaku, zdarzają się przecież "nawroty" w porównywaniu itd. Poza tym trzeba wiedzieć, jak się wyrażeń regularnych używa, znać ich konkretną implementację (są przecież różnice między regex w Perlu a np. egrepie czy PHP), a żeby zamienić "wszystkie a na b" ta wiedza raczej nie jest potrzebna ;)
Użytkownik Rutterkin edytował ten post 27 luty 2008, 17:01
Z tego co mi wiadomo to jesli w wyrazeniu nie uzywasz podgrup to zlozonosc jest zawsze O(nm) gdzie n to dlugosc text a m to liczba roznych operacji ktore wykonujesz na tekscie...
W przypadku zamiany znaku to bedzie dokladnie O(n) bo wykonujesz tylko 1 porownanie...
Moge sie of course mylic bo zlozonosc obliczeniowa mialem dosc dawno... ;-)
Użytkownik nugget edytował ten post 27 luty 2008, 17:39
Pisałem na telefonie, więc mogły się wkraść błędy. OK, inaczej$tab=str_split($ciag,2); echo implode(' ',$tab);
O to chodziło, dzięki wielkie
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Mam pytanie. Pobieram sobie z forma albo z bazy pewien ciąg znaków np."Ala ma kota" i pakuje go do zmiennej. Jak zamienić w tym ciągu znaków wszystkie litery "a" na np. litery "b"?? Z góry dziękuje za odpowiedz :)
Może np. za pomocą funkcji str_replace(), str_ireplace(), substr_replace()? :>
Może np. za pomocą funkcji str_replace(), str_ireplace(), substr_replace()? :>
hmmm, chyba raczej nie o to mi chodzilo...
No to polecam lekturę http://pl.php.net/ma...str-replace.php ;)
No to polecam lekturę http://pl.php.net/ma...str-replace.php ;)
Ok, dzieki, przydalo sie.
Najlepiej za pomoca wyrażeń regularnych funkcje:
ereg_replace()
lub
eregi_replace()
...chyba się spóźniłem ;)
Użytkownik Mumas edytował ten post 26 luty 2008, 19:05
...
...chyba się spóźniłem ;)
E, nie, o wyrażeniach regularnych jeszcze nie było :D Ale nie wiem, czy to nie jest w tym wypadku strzelanie z armaty do komara ;)
Wszystko dziabie, jakby ktoś kiedyś szukał to wsadzam gotowca:
<? $ciag = "ala ma kota"; $kodowane = array("a"); $rozkodowane = array("b"); $wynik = str_replace($kodowane, $rozkodowane, $ciag); echo ($wynik); ?>
E, nie, o wyrażeniach regularnych jeszcze nie było :D Ale nie wiem, czy to nie jest w tym wypadku strzelanie z armaty do komara ;)
dokladnie, to jest strzelanie - wyrazenia regularne sa wyraznie wolniejsze. nawet w manualu php pisze ze lepiej korzystac z prostych funkcji jak podane wczesniej.
A jeszcze mam jedno pytanko, tylko odbiegające od tematu, ale także dotyczy formatu ciągu znaków. A wiec, mam w zmiennej jakiś ciąg "abcdefgh". Moje pytanie - czy istnieje funkcja, która oddzieli znaki tak, żeby szły dwójkami np."ab cd ef gh"? Coś żeby wstawiało spacje po 2 znakach?
Cóż? Najszybciej to chyba pętlą.$ciagznakow=(string)$ciagznakow; for ($i=0,$i=strlen($ciagznakow),$i+=2) echo $ciagznakow[$i].$ciagznakow[$i+1].' ';Możesz też zrobić z tego tablicę i użyć array_chunk. Ale pierwszy sposób chyba jest łatwiejszy i szybszy.
http://pl2.php.net/m...n.str-split.php
Użytkownik andrzej_aa edytował ten post 27 luty 2008, 10:41
dokladnie, to jest strzelanie - wyrazenia regularne sa wyraznie wolniejsze. nawet w manualu php pisze ze lepiej korzystac z prostych funkcji jak podane wczesniej.
Dlaczego wyrazenia regularne mialyby byc wolniejsze.. Oba rodzaje przetwarzania maja liniowa zlozonosc i zaleza tylko od dlugosci stringa...? No chyba ze w php to jest jakos inaczej zaimplementowane...
Czy ktos wie cos wiecej na ten temat?
Cóż? Najszybciej to chyba pętlą.$ciagznakow=(string)$ciagznakow; for ($i=0,$i=strlen($ciagznakow),$i+=2) echo $ciagznakow[$i].$ciagznakow[$i+1].' ';Możesz też zrobić z tego tablicę i użyć array_chunk. Ale pierwszy sposób chyba jest łatwiejszy i szybszy.
http://pl2.php.net/m...n.str-split.php
Tutaj troche bledow w kodzie, probowalem naprawic dajac kod
$ciag=(string)$ciag; for ($i=0; $i=strlen($ciag); $i+=2) { echo $ciag[$i].$ciag[$i+1].' '; }
Ale i tak zwraca blad :/ Moze ja cos zle robie?
Pisałem na telefonie, więc mogły się wkraść błędy. OK, inaczej$tab=str_split($ciag,2); echo implode(' ',$tab);
Dlaczego wyrazenia regularne mialyby byc wolniejsze.. Oba rodzaje przetwarzania maja liniowa zlozonosc i zaleza tylko od dlugosci stringa...? No chyba ze w php to jest jakos inaczej zaimplementowane...
Czy ktos wie cos wiecej na ten temat?
A kto powiedział, że wyrażenia regularne mają taką samą złożoność jak "zwykłe" przeszukiwanie i zależą tylko od długości stringa? Obecność symboli wieloznacznych powoduje, że to nie jest proste sprawdzenie znak po znaku, zdarzają się przecież "nawroty" w porównywaniu itd. Poza tym trzeba wiedzieć, jak się wyrażeń regularnych używa, znać ich konkretną implementację (są przecież różnice między regex w Perlu a np. egrepie czy PHP), a żeby zamienić "wszystkie a na b" ta wiedza raczej nie jest potrzebna ;)
Użytkownik Rutterkin edytował ten post 27 luty 2008, 17:01
Z tego co mi wiadomo to jesli w wyrazeniu nie uzywasz podgrup to zlozonosc jest zawsze O(nm) gdzie n to dlugosc text a m to liczba roznych operacji ktore wykonujesz na tekscie...
W przypadku zamiany znaku to bedzie dokladnie O(n) bo wykonujesz tylko 1 porownanie...
Moge sie of course mylic bo zlozonosc obliczeniowa mialem dosc dawno... ;-)
Użytkownik nugget edytował ten post 27 luty 2008, 17:39
Pisałem na telefonie, więc mogły się wkraść błędy. OK, inaczej$tab=str_split($ciag,2); echo implode(' ',$tab);
O to chodziło, dzięki wielkie