Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Literowanie
Forum PHP.pl > Forum > PHP
moto0095
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
wookieb
  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.
moto0095
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.
wookieb
A odpaliłeś go?
No przecież w $matches masz dokładnie to co chcesz.
moto0095
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. }
lukaskolista
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
moto0095
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");

wookieb
No ale dlaczego chcesz żeby została ta pętla?
moto0095
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
wookieb
No to co za problem przelecieć pętlą po tablicy wynikowej?

A dlaczego 2? Nie pamiętam ale w czym Ci to szkodzi?
lukaskolista
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
Fantazyn
  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. }
moto0095
@Fantazy, a jak będzie to ch questionmark.gif
wookieb
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.
Wicepsik
tarzan

Kod
t a rz a n

czy
Kod
t a r z a n


?
moto0095
t a rz a n
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.