Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Pętelka w pętelce :)
DraGo110
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 6
Dołączył: 22.12.2009
Skąd: Katowice

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



Siemanko Panowie potrzebuje waszej pomocy. mój problem jest następujący.
piszę funkcje parsujące dane i zrobiłem funkcje która zapętla mi dane. jednak mam mały problem

Nie mogę umieścić pętli w pętli ponieważ wysypuje mi się całe wyrażenie ma ktoś może pomysł jak by to inaczej ugryźć ?

Jeśli zrobię tak wszystki działa jak powinno.

  1. [foreach;logowanie][/foreach]
  2. [foreach;rejestracja][/foreach]
  3. [foreach;kontakt][/foreach]




jednak klocki się zaczynają kiedy... chce umieścić petle w pętli.

  1. [foreach;logowanie]
  2. [foreach;kontakt][/foreach]
  3. [/foreach]



kod wygląda następująco :

  1. $value=preg_match_all('/\[foreach;(.*?)\](.*?)\[\/foreach]/s',$html,$matches);
  2. echo'<pre>';
  3. print_r($matches);
  4. echo ' </pre>';



Macie jakiś pomysł jak by przenieśc pętle do drugiego wymiaru tablicy albo coś?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
droslaw
post
Post #2





Grupa: Zarejestrowani
Postów: 98
Pomógł: 33
Dołączył: 10.05.2011
Skąd: Krak

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


Wyrażenia regularne są do tego nie najlepsze. Możesz poeksperymentować z rekurencyjnymi wyrażeniami http://php.net/manual/en/reference.pcre.pa...n.modifiers.php, ale i tak nie sparsujesz tego jednym wywołaniem preg_match.
  1. $value=preg_match_all('/\[foreach;(.*?)\](((?R)|.)*?)\[\/foreach]/s',$html,$matches);
  2. echo'<pre>';
  3. print_r($matches);
  4. echo ' </pre>';

Kod trochę zmieniłem. Zwróć uwagę na "((?R)|.)" we wzorcu. Przez to wyniki będą zawierały odpowiedni tag zamykający ([/foreach]).
Pod indeksem 2 w wyniku masz wszystkie zagnieżdzone foreach, które musisz parsować rekurencyjnie, dopóki nie wyciągniesz wszystkich poziomów zagnieżdżeń.

Jeśli format danych nasz prosty i nie chcesz parsować tym niczego poważnego to może regexpy wystarczą.
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: 22.08.2025 - 21:46