Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Literowanie
moto0095
post 19.10.2010, 20:16:57
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Witam. Szukałem w Google i nie mogłem nigdzie tego znaleźć. A mianowicie mam o to taki skrypt który literuje mi wyrazy, czyli np:
"forum" napisze w takiej postaci "f o r u m".
Używam do tego takiego skryptu:
  1. $tekst = 'słowo';
  2.  
  3. for($i=0; $i<strlen($tekst); $i++) {
  4. $order[] .= $tekst{$i};
  5. }
  6.  
  7. for($i=0; $i<count($order); $i++) {
  8. echo $order[$i].' ';
  9. }


I teraz moje pytanie: jak zrobić aby "sz", "cz" itp. były traktowane jako jedna "litera" questionmark.gif
Go to the top of the page
+Quote Post
wookieb
post 19.10.2010, 20:23:42
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  1. $wyraz = 'Łukasz';
  2. preg_match_all('/(sz|cz|rz|.)/iu', $wyraz, $matches);
  3. print_r($matches);


Twój kod nie zadziała na słowach zawierających polskie znaki.


--------------------
Go to the top of the page
+Quote Post
moto0095
post 19.10.2010, 20:29:30
Post #3





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Jak do tej pory działa i z polskimi znakami smile.gif

Tylko nie wiem jak za bardzo twój skrypt połączyć z moim.

Ten post edytował moto0095 19.10.2010, 20:30:40
Go to the top of the page
+Quote Post
wookieb
post 19.10.2010, 20:32:51
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A odpaliłeś go?
No przecież w $matches masz dokładnie to co chcesz.


--------------------
Go to the top of the page
+Quote Post
moto0095
post 20.10.2010, 18:05:10
Post #5





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Oj sorki zrobiłem literówkę w zmiennej. Wszystko pięknie śmiga. Wielkie dzięki smile.gif

Ok. Chciałbym odnowić temat.
Czy dało by się taki efekt jak opisałem w pierwszym poście z użyciem tego kodu:
  1. $tekst = 'słowo';
  2.  
  3. for($i=0; $i<strlen($tekst); $i++)
  4. $order[] .= $tekst{$i};
  5. }
  6.  
  7. for($i=0; $i<count($order); $i++) {
  8. echo $order[$i].' ';
  9. }

questionmark.gif

Szczególnie zależy mi aby pozostał ten fragment :
  1. for($i=0; $i<strlen($tekst); $i++)
  2. $order[] .= $tekst{$i};
  3. }
Go to the top of the page
+Quote Post
lukaskolista
post 20.10.2010, 18:58:55
Post #6





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


wedlug mnie jest to zle zrobione, zle w sensie 1 niepotrzebna petla.

Sprobuj odpalic skrypt
  1. $wyraz = 'wyraz';
  2. for ($i = 0; $i < strlen($wyraz); $i++) {
  3. echo $wyraz[$i];
  4. }

W tym przypadku ciag znakow traktowany jest jako tablica, gdzie kolejny index to kolejna litera
Go to the top of the page
+Quote Post
moto0095
post 20.10.2010, 20:27:21
Post #7





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Ok tylko ta dróga pętla nie ma znaczenia, tu najważniejsza jest ta:
  1. for($i=0; $i<strlen($tekst); $i++)
  2. $order[] .= $tekst{$i};
  3. }


Chodzi mi o to, że jak na przykład $tekst = "Mieszko", to skrypt stworzy taką tablicę:
array("M", "i", "e", "sz", "k", "o");

Go to the top of the page
+Quote Post
wookieb
post 20.10.2010, 21:29:32
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




No ale dlaczego chcesz żeby została ta pętla?


--------------------
Go to the top of the page
+Quote Post
moto0095
post 20.10.2010, 21:42:19
Post #9





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Gdyż jest to tylko wycinek skryptu i ta pętla jest w nim niezbędna.

I mam jeszcze jedno pytanie:
Dlaczego to:
  1. preg_match_all('/(sz|cz|rz|.)/iu', $wyraz, $matches);

zwraca 2 tablice questionmark.gif
Go to the top of the page
+Quote Post
wookieb
post 21.10.2010, 08:01:07
Post #10





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




No to co za problem przelecieć pętlą po tablicy wynikowej?

A dlaczego 2? Nie pamiętam ale w czym Ci to szkodzi?


--------------------
Go to the top of the page
+Quote Post
lukaskolista
post 21.10.2010, 12:46:37
Post #11





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


preg_match_all nie zwraca tablicy, zwraca int. Tablica wynikow zostanie zapisana w zmiennej podanej jako 3 parametr (w tym przypadku $matches).
http://php.net/manual/en/function.preg-match-all.php tu masz dokumentacje tej funkcji
Go to the top of the page
+Quote Post
Fantazyn
post 21.10.2010, 13:44:26
Post #12





Grupa: Zarejestrowani
Postów: 135
Pomógł: 38
Dołączył: 24.02.2007
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


  1. $tekst = 'Mieszko';
  2.  
  3. $i = 0;
  4. while($i < strlen($tekst))
  5. {
  6. if(in_array($tekst{$i}, array('c','s','r')) && ($tekst{$i+1} == 'z'))
  7. {
  8. $order[] .= $tekst{$i}.'z';
  9. $i++;
  10. }
  11. else
  12. {
  13. $order[] .= $tekst{$i};
  14. }
  15. $i++;
  16. }
  17.  
  18. for($i=0; $i<count($order); $i++) {
  19. echo $order[$i].' ';
  20. }


osobny warunek dla 'ch':

  1. $tekst = 'Mieszko';
  2.  
  3. $i = 0;
  4. while($i < strlen($tekst))
  5. {
  6. if(in_array($tekst{$i}, array('c','s','r')) && ($tekst{$i+1} == 'z'))
  7. {
  8. $order[] .= $tekst{$i}.'z';
  9. $i++;
  10. }
  11. elseif(($tekst{$i} == 'c') && ($tekst{$i+1} == 'h'))
  12. {
  13. $order[] .= $tekst{$i}.'h';
  14. $i++;
  15. }
  16. else
  17. {
  18. $order[] .= $tekst{$i};
  19. }
  20. $i++;
  21. }
  22.  
  23. for($i=0; $i<count($order); $i++) {
  24. echo $order[$i].' ';
  25. }


Ten post edytował Fantazyn 22.10.2010, 07:39:52


--------------------
Go to the top of the page
+Quote Post
moto0095
post 21.10.2010, 15:46:14
Post #13





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


@Fantazy, a jak będzie to ch questionmark.gif
Go to the top of the page
+Quote Post
wookieb
post 21.10.2010, 16:20:44
Post #14





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A ja się caly czas pytam co stoi na przeszkodzie aby przelecieć pętlą po gotowej tablicy? Nie wspomnę, że to ostatnie rozwiązanie jest znacznie wolniejsze od preg_matcha.


--------------------
Go to the top of the page
+Quote Post
Wicepsik
post 21.10.2010, 17:05:56
Post #15





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


tarzan

Kod
t a rz a n

czy
Kod
t a r z a n


?


--------------------
Go to the top of the page
+Quote Post
moto0095
post 21.10.2010, 18:59:35
Post #16





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


t a rz a n
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 21.06.2024 - 04:35