Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z wzorcami w preg_match()
SaMi
post
Post #1





Grupa: Zarejestrowani
Postów: 173
Pomógł: 14
Dołączył: 27.03.2004
Skąd: Białystok

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


Witam,
Problem pojawia się gdy do funkcji preg_match zaczynam podstawać wzorce pobrane z talicy, wartość wzorca podana jako pierwsza do funkcji preg_match zostaje jak by zapamiętana. Pomimo podania innej wartości wzorca, warunek jest sprawdzany dla wartości podanej na samym początku a nie tej ostatniej. Z czego to wynika i jak to ominać?
Mam nadzieję że dość zrozumiale opisałem problem. Niżej poglądowy przykład:

  1. public $content = array();//jakaś tablica zawierająca np. wiersze pliku txt
  2.  
  3. public function get( $id_pattern=0)
  4. {
  5.  
  6. $patterns = array(
  7. '0'=>'[pattern1]',
  8. '1'=>'[pattern2]',
  9. '2'=>'[pattern3]'
  10. );
  11.  
  12.  
  13. if (count($patterns)>$id_pattern)
  14. {
  15. foreach($this->content as $c)
  16. {
  17. preg_match($patterns[$id_pattern], $c, $return);
  18.  
  19. if($return)
  20. {
  21. return $return;
  22. break;
  23. }
  24. else
  25. {
  26. if ($c == end($c))
  27. {
  28. $this->get(++$id_pattern);
  29. break;
  30. }
  31. }
  32. }
  33. }
  34.  
  35. }


Działa to albo powinno działać w ten sposób że jeśli w tablicy nie znajdzie niczego co pasuje do pierwszego wzorca to sprawdza dla kolejnego itd.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
d3ut3r
post
Post #2





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


  1. if ($c == end($c))


na

  1. if ($c == end($this->content))


Poza tym rekurencja to mechanizm do stosowania w naprawdę wyjątkowych okolicznościach, ponieważ jest dość zasobożerny a w tym przypadku wcale nie jest ona niezbędna.

Ten post edytował d3ut3r 29.11.2012, 12:26:12
Go to the top of the page
+Quote Post
SaMi
post
Post #3





Grupa: Zarejestrowani
Postów: 173
Pomógł: 14
Dołączył: 27.03.2004
Skąd: Białystok

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


To nie to (IMG:style_emoticons/default/smile.gif) w każdym razie walczę z tym.
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: 24.12.2025 - 10:12