ďťż

Ł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
  •