Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pętelka w pętelce :)
Forum PHP.pl > Forum > Przedszkole
DraGo110

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ś?
droslaw
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ą.
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.