Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Parser
Forum PHP.pl > Forum > Przedszkole
MrPey
Witam mam kod parsera
  1. <?
  2.        function out_code($a)
  3.    {
  4.        $a = str_replace('ź','a', $a);
  5.        $a = str_replace('a','ą', $a);
  6.        $a = str_replace('ą','b', $a);
  7.        $a = str_replace('b','c', $a);
  8.        $a = str_replace('c','ć', $a);
  9.        $a = str_replace('ć','d', $a);
  10.        $a = str_replace('d','e', $a);
  11.        $a = str_replace('e','ę', $a);
  12.        $a = str_replace('ę','f', $a);
  13.        $a = str_replace('f','g', $a);
  14.        $a = str_replace('g','h', $a);
  15.        $a = str_replace('h','i', $a);
  16.        $a = str_replace('i','j', $a);
  17.        $a = str_replace('j','k', $a);
  18.        $a = str_replace('k','l', $a);
  19.        $a = str_replace('l','ł', $a);
  20.        $a = str_replace('ł','m', $a);
  21.        $a = str_replace('m','n', $a);
  22.        $a = str_replace('n','ń', $a);
  23.        $a = str_replace('ś','o', $a);
  24.        $a = str_replace('o','ó', $a);
  25.        $a = str_replace('ó','p', $a);
  26.        $a = str_replace('p','r', $a);
  27.        $a = str_replace('r','s', $a);
  28.        $a = str_replace('s','y', $a);
  29.        $a = str_replace('y','u', $a);
  30.        $a = str_replace('u','w', $a);
  31.        $a = str_replace('w','v', $a);
  32.        $a = str_replace('v','x', $a);
  33.        $a = str_replace('x','y', $a);
  34.        $a = str_replace('y','z', $a);
  35.        $a = str_replace('z','ż', $a);
  36.        $a = str_replace('ż','ź', $a);
  37.        return $a;
  38.    }
  39.    
  40.    $text = 'ź';
  41.    
  42.    echo out_code($text);
  43. ?>

Kod powinien zwrócić 'a', lecz zwraca 'ń'
nospor
$a = str_replace('ź','a', $a); - zamienia ci ź na a
$a = str_replace('a','ą', $a); - zamienia ci a na ą
....
i tak dalej az dojdziesz do ń

czemu wiec sie dziwisz ze otrzymujesz ń ? NIe wiesz ze kod wykonywany jest linia po linii? winksmiley.jpg
phpion
Funkcja działa dobrze. Dobrze = tak jak została napisana. Działa to tak:
1. Zamień ż na a -> w zmiennej masz a
2. Zamień a na ą -> w zmiennej masz ą
3. Zamień ą na b -> w zmiennej masz b
itd itd
4. Zamień n na ń -> w zmiennej masz ń
5. Zamień ś na o -> ups, w zmiennej masz ń a nie ś więc nie nastąpi zmiana.
MrPey
bo powinienem otrzymać 'a'? w końcu parsuje mi 'ź', co nie?
nospor
no ale kolejne linie kodu też dzialają i a zamienia sie na ą i tak dalej. przeciez ci to tlumaczymy po polsku...
MrPey
nie rozumiesz, że każdą literkę parsuje mi na 'ń'?
nospor
az mi sie cisną pewne epitety na usta.....

  1. <?php
  2. $text = 'y';
  3.  
  4.   echo out_code($text);
  5. ?>

tez ci geniuszu na ń zamienilo? NIE. wiec przeanalizuj wkoncu to co ci piszemy....
MrPey
Cytat(nospor @ 13.05.2009, 22:26:44 ) *
az mi sie cisną pewne epitety na usta.....

  1. <?php
  2. $text = 'y';
  3.  
  4.   echo out_code($text);
  5. ?>

tez ci geniuszu na ń zamienilo? NIE. wiec przeanalizuj wkoncu to co ci piszemy....


geniuszu, albo ja mam coś z serwerem, albo Ty coś z .... Tak, zamieniło mi na 'ń'!
nospor
Cytat
Tak, zamieniło mi na 'ń'!
Kit mi wciskasz teraz smile.gif
ALbo źle wpisales kod co ci podalem smile.gif
ALbo wywolaes dwa razy out_code(). wtedy faktycznie spowrotem zamieni na ń

edit: oj.... po co kasowales tego "mózga". tak ladnie wygladalo.....

edit down: dobra, ja wymiekam.... moze znajdzie sie ktos kto ma wiecej cierpliwosci
MrPey
ja sam już tego nie ogarniam, ale zauważyłem, że wyświetla ostatnią literę z parsera, jak np. mam

$a = str_replace('v','x', $a);
$a = str_replace('x','y', $a);
$a = str_replace('y','z', $a);
$a = str_replace('z','ż', $a);
$a = str_replace('ż','ź', $a);
$a = str_replace('ź','a', $a);

to wyświetli 'a' choćbym nie wiem co wpisał

jak dam taki kod
  1. <?
  2.       function out_code($a)
  3.   {
  4.       $a = str_replace('a','ą', $a);
  5.       $a = str_replace('ą','b', $a);
  6.       return $a;
  7.   }
  8.  
  9.   $text = 'aą';
  10.  
  11.  echo out_code($text);
  12. ?>


to wyświetla 'bb'. ocb?
Crozin
A czytałeś dwie pierwsze odpowiedzi do Twojego pytania? No przecież wyjaśnili Ci. Czego w tym nie rozumiesz...
RafaelX
zrozum to po prostu zamienia literki po kolei
masz np v zamieni to na x i parser "schodzi" o linijkę niżej zmienna teraz ma wartośc "x"
wiec zmienia x na y znowu linijka nizej i tak do końca... takie to trudne??
  1. <?php
  2. $a = str_replace('v','x', $a);
  3. $a = str_replace('x','y', $a);
  4. $a = str_replace('y','z', $a);
  5. $a = str_replace('z','ż', $a);
  6. $a = str_replace('ż','ź', $a);
  7. $a = str_replace('ź','a', $a);
  8. ?>


jak bys dalej miał
  1. <?php
  2. $a = str_replace('a','cos tam', $a);
  3.  
  4. //koniec
  5. ?>

to bys otrzymał "coś tam" a ze nie masz otrzymasz "a"

wywołując funkcje ze zmienną równą czy to 'v', czy 'x', czy 'z', czy 'y', czy 'z', czy 'ż', czy też 'ź', zawsze otrzymasz to samo!!




PS:
żal...
uirapuru
a wszystko zamienia na ń, bo jak już zamieni na ń to nigdzie nie masz zamiany ń na nic innego, albo nie widzę... powinieneś sobie stworzyć tablicę z parami co na co zamieniać i dopiero stringa sobie z jej pomocą replaceować...
slimboj
Tutaj jest błąd.
Cytat(MrPey @ 13.05.2009, 22:12:32 ) *
  1. <?
  2.        function out_code($a)
  3.    {
  4.        //...
  5.        $a = str_replace('n','ń', $a);
  6.        $a = str_replace('ś','o', $a);
  7.        //...
  8.    }
  9. //...
  10. ?>

Parser dochodzi do pozycji gdzie zamienia n na ń i dalej nie ma jak tego ń zamienić na inny znak.

Pomiędzy te dwie linie wstaw:
  1. <?php
  2. $a = str_replace('ń','ś', $a);
  3. ?>
phpion
Cytat(slimboj @ 14.05.2009, 13:48:32 ) *
Pomiędzy te dwie linie wstaw:
  1. <?php
  2. $a = str_replace('ń','ś', $a);
  3. ?>

Brawo. I wtedy na wyjściu będzie otrzymywał zawsze (prawie, chyba, że poda "nie pasujące" wejście) "ż".
slimboj
Owszem, ale bez użycia jakiejś instrukcji, np. switch, nie wyciągnie sobie zmiennej $a o wartości a.
Po takim wywołaniu jak w pierwszym poście zawsze będzie przechodził do ostatniego elementu.
osl
przecież najprostsze co można zrobić, o czym zdaje się już ktoś wspomniał, to zamiast seri str_replace zrobić jednego z odpowiednimi tablicami jako parametry...
żaden switch nie potrzebny, jedynie dwie tablice i jedna funkcja... no i return tongue.gif
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.