Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] problem z funkcją
MarcinM
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.10.2006

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


Mam problem z przetwarzaniem danych w funcji:

  1. <?php
  2. function TRE($align,$text){
  3.  /*podglad dziala*/
  4.  return '< tresc style="">'.$text.'< /tresc>';
  5. /*nie dziala*/
  6. if($align=='left'){
  7. return '< tresc style="text-align:left">'.$text.'< /tresc>';
  8. }elseif($align=='right'){
  9. return '< tresc style="text-align:right">'.$text.'< /tresc>';
  10. }
  11.  
  12.  
  13. }
  14. $text = ' To jest tresc do <tresc align=right>sformatowania</tresc>'; 
  15.  
  16. echo preg_replace("#<tresc( align=(left|right))>(.*?)</tresc>#si", TRE("1","3"), $text);
  17. ?>


Co może być powodem tego, że nie działa klauzula if ?

Ten post edytował MarcinM 10.10.2006, 23:18:14
Go to the top of the page
+Quote Post
Sabistik
post
Post #2


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


  1. <?php
  2. return '< tresc style="">'.$text.'< /tresc>';
  3. ?>

ta oto piekna linijka jest tego powodem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Kiedy returnujesz jakas wartosc dalsza czesc funkcji nie jest wykonywana.
Go to the top of the page
+Quote Post
mike
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Z podstawami programowania zapraszam do manuala: Podręcznik php :: Funkcje :: Zwracane wartości

Przenoszę z php na Przedszkole.
Go to the top of the page
+Quote Post
MarcinM
post
Post #4





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.10.2006

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


Nie zostałem zrozumiany.

Skreśl linie:
  1. <?php
  2. /*podglad dziala*/
  3.  return '< tresc style="">'.$text.'< /tresc>';
  4. ?>


i przeparsuj kod.

Nic nie zostanie wyswietlone, pytanie dlaczego.
Go to the top of the page
+Quote Post
mike
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(MarcinM @ 11.10.2006, 00:15:30 ) *
Nic nie zostanie wyswietlone, pytanie dlaczego.

A dlaczego coś ma się pokazać?
Funkcję poza zdefiniowaniem należy jeszcze wywołać.

Weź sobie do serca radę i przeczytaj rozdział: Podręcznik php :: Opis języka :: Funkcje
Go to the top of the page
+Quote Post
MarcinM
post
Post #6





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.10.2006

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


Funcja jest wywołana w tej oto linii:

  1. <?php
  2. echo preg_replace("#<tresc( align=(left|right))>(.*?)</tresc>#si", TRE("1","3"), $text);
  3. ?>


Sorka, mały błąd (zapomniałem o \\):

echo preg_replace("#<tresc( align=(left|right))>(.*?)</tresc>#si", TRE("\\1","\\3"), $text);

Ten post edytował MarcinM 10.10.2006, 23:24:51
Go to the top of the page
+Quote Post
mike
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Ech, no faktycznie.
Popracuj nad wcięciami i czytelnościa kodu

A nie wyswietla się bo żaden z warunków nie jest spełniony.
W instrukcjach warunkowych sprawdzasz wartośc zmiennej $align a podczas wywołania funkcji przekazujesz tam jako "l"

Przecież "l" nie jest równe ani "left", ani "right".


//edit
No teraz to co innego (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
MarcinM
post
Post #8





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.10.2006

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


To inaczej:

  1. <?php
  2. function TRE($align,$text){
  3.  
  4.  return $align;
  5.  //to wyswietli sie left lub right
  6.  
  7.  //natomiast w klauzuli nie zostanie wykonane porownanie. Pytanie dlaczego?
  8.  
  9.  /*nie dziala*/
  10.  if($align=='left'){
  11. return '< tresc style="text-align:left">'.$text.'< /tresc>';
  12.  }elseif($align=='right'){
  13. return '< tresc style="text-align:right">'.$text.'< /tresc>';
  14.  }
  15.  
  16.  
  17. }
  18. ?>


Ten post edytował MarcinM 10.10.2006, 23:33:45
Go to the top of the page
+Quote Post
MarcinM
post
Post #9





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.10.2006

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


Dokladnie wyswietla sie align=left lub align=right, ale nie o to chodzi.

  1. <?php
  2. function TRE($align,$text){
  3.  
  4.  return $align;
  5.  //to wyswietli sie left lub right
  6.  
  7.  //natomiast w klauzuli nie zostanie wykonane porownanie. Pytanie dlaczego?
  8.  
  9.  /*nie dziala*/
  10.  if($align=='align=left'){
  11. return '< tresc style="text-align:left">'.$text.'< /tresc>';
  12.  }elseif($align=='align=right'){
  13. return '< tresc style="text-align:right">'.$text.'< /tresc>';
  14.  }
  15.  
  16.  
  17. }
  18. ?>



Pytanie dlaczego nie jest zwracany kod z klauzuli.

Ten post edytował MarcinM 10.10.2006, 23:59:16
Go to the top of the page
+Quote Post
MarcinM
post
Post #10





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.10.2006

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


Znikneły posty grzesia (jeżeli dobrze pamietam nick)

(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Ten kod jest poprawny:
  1. <?php
  2. function TRE($align,$text){
  3.  /*podglad dziala*/
  4.  //return $align;
  5.  /*ponizsza klauzula nie dziala*/
  6.  if($align=='align=left'){
  7.  return '< tresc style="text-align:left">'.$text.'< /tresc>';
  8.  }elseif($align=='align=right'){
  9. return '< tresc style="text-align:right">'.$text.'< /tresc>';
  10.  }
  11. }
  12.  
  13. $text = ' To jest tresc do <tresc align=right>sformatowania</tresc>'; 
  14.  
  15. echo preg_replace("#<tresc( align=(left|right))>(.*?)</tresc>#si", TRE("1","3"), $text);
  16. ?>

Moje pytanie brzmi:
Dlaczego nie jest wyswietlany kod z klauzuli.
Go to the top of the page
+Quote Post
MarcinM
post
Post #11





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.10.2006

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


Zle?

return $align zwraca align=left lub align=right, czyli wszytko Ok

natomiast nie zostaje porownane $align=='align=left' lub $align=='align=left'
Dlaczego?
Pytanie co zrobic, zeby warunek byl spelniony?

PS.
echo nie ma tu zastosowania poniewaz wynik funcji ma byc przetworzony a nie wyswietlony.







Znowu znikneła odpowiedz gszesia (IMG:http://forum.php.pl/style_emoticons/default/aaevil.gif)

W nawiązaniu do byłej odpowiedzi gszesia informuje, że nie ma błędu w tej linii:
  1. <?php
  2. echo preg_replace("#<tresc( align=(left|right))>(.*?)</tresc>#si", TRE("1","3"), $text);
  3. ?>


i ponawiam pytanie, dlaczego nie dziala klauzula if (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)



PS.
Byc moze to specyfika tego forum, ale jak chce dodac nowa odpowiedz to tresc jest wrzucana do mojej ostaniej odpowiedzi (zamiast do nowej)(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Ten post edytował MarcinM 11.10.2006, 00:41:51
Go to the top of the page
+Quote Post
gszesiek
post
Post #12





Grupa: Zarejestrowani
Postów: 152
Pomógł: 1
Dołączył: 17.09.2006

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


znalazłem łatwiejsze rozwiązanie jeśli zależy Ci na czasie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
ze strony
Kod
<?php
$string = "The quick brown fox jumped over the lazy dog.";

$patterns[0] = "/quick/";
$patterns[1] = "/brown/";
$patterns[2] = "/fox/";

$replacements[2] = "bear";
$replacements[1] = "black";
$replacements[0] = "slow";

echo preg_replace($patterns, $replacements, $string);
?>


(gdzieś pewnie przekombinowałeś, znajdź proszę ten błąd, bo będzie po nocy )

-------------------
a Michal patrzy i nie pomoże :|

-------------------
Cytat
return $align zwraca align=left lub align=right, czyli wszytko Ok

nie do końca, zauważ że nie wypisuje teksu "sformatowany"

Ten post edytował gszesiek 11.10.2006, 01:43:13
Go to the top of the page
+Quote Post
MarcinM
post
Post #13





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.10.2006

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


Czy ktoś rozumie w czym jest problem?

Proszę wkleić kod i przeparsować.

return zwróci wartość zmiennej $align

ale nie zwróci stringów z klauzuli if().

Dlaczego? Przecież $align posiada wartości (użyte w porównaniu).


PS.
Info dla moderatora. Zauważyłem błąd w kodzie forum. Podczas zapisywania usuwane są podwójne ukośniki \\

W mojej poprzedniej odpowiedzi jest:
echo preg_replace("#<tresc( align=(left|right))>(.*?)</tresc>#si", TRE("\1","\3"), $text);
powinnlo byc:
echo preg_replace("#<tresc( align=(left|right))>(.*?)</tresc>#si", TRE("\\1","\\3"), $text);

Ten post edytował MarcinM 11.10.2006, 01:07:23
Go to the top of the page
+Quote Post
mike
post
Post #14





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(gszesiek @ 11.10.2006, 01:44:15 ) *
a Michal patrzy i nie pomoże :|

  1. <?php
  2.  
  3. function TRE($matches){
  4.  
  5.  
  6.  if( trim($matches[1])=='align=left' ) {
  7.  
  8.  return '< tresc style="text-align:left">'.$matches[3].'< /tresc>';
  9.  
  10.  } elseif( trim($matches[1])=='align=right' ) {
  11.  
  12.  return '< tresc style="text-align:right">'.$matches[3].'< /tresc>';
  13.  }
  14. }
  15.  
  16. $text = ' To jest tresc do <tresc align=right>sformatowania</tresc>';
  17.  
  18. echo preg_replace_callback("#<tresc( align=(left|right))>(.*?)</tresc>#si", 'TRE', $text);
  19.  
  20. ?>



Cytat(MarcinM @ 11.10.2006, 01:57:45 ) *
Info dla moderatora. Zauważyłem błąd w kodzie forum. Podczas zapisywania usuwane są podwójne ukośniki
Tak, ten błąd jest znany.
Pracujemy nad tym żeby go nie było.

Czas iść spać.
O 07:00 trzeba wstać do pracy :|
Go to the top of the page
+Quote Post
MarcinM
post
Post #15





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.10.2006

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


Przyznam szczerze, że nie pomyślałem o tablicy.

Ogólnie rzecz ujmując przenoszenie wartości funcji za pomocą argumentów nie do końca działa poprawnie. Byc może w PHP5 nie będzie tego problemu, muszę sprawdzić

Dzięki
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 05:10