Php recursivitate

Astăzi, aș dori să vorbesc pe tema recursivitatii în PHP.

Mai mult de o sută de programatori PHP novice nedumerit peste display-uri de structuri de director multi-nivel. Astfel de sisteme sunt adesea utilizate pe cele mai multe site-uri au un meniu. Un exemplu poate fi văzută în figură.

Php recursivitate

În această figură este reprezentată ca o ierarhie de directoare. Dezvoltarea unui astfel de director de pe sistemul server am descris în articolul dirrektory serverul de scanare. Puteți trimite totuși, după cum urmează:

Php recursivitate

Această figură arată magazin on-line de meniu, toate au format aceeași metodă recursivitatii.

Lucrul cu recursie doar la prima vedere pare dificil. De fapt, totul este mult mai simplu decât pare, trebuie doar să ne amintim câteva reguli:

  1. Întotdeauna necesar să se prevadă o condiție pentru eliberarea recursivitatii. În caz contrar, serverul va închide. Și acest lucru nu este consecința cea mai plăcută.
  2. Nu este nevoie să o complice, umple-l condiții, cecuri, etc. Este necesar să se gândească în avans, deoarece Recursivitatea - o procedură de resurse.
  3. Trebuie să fie clar înțeles în cap, care face programul de la un moment dat.

Acum, să creeze o bază de date de test pentru imaginar nostru de e-shop. Pentru a face acest lucru, executați următoarea interogare:

Imediat după crearea tabelului, executați următoarea interogare care va completa datele sale pentru un exemplu de lucru recursie în PHP:

Să examinăm acum tabelul de rezultat, în același timp vorbesc despre schema de sisteme de astfel de recursivitate.

Rezultatul este un tabel care arată figura de mai jos:

Php recursivitate

O astfel de structură a tabelului - eșantionul minim pentru analiza activității recursie în php.

Să începem de la început.

Câmp „id“ - un identificator unic pentru fiecare intrare. Avem nevoie de el pentru ceva ce am putea face acest punct de referință complet (de exemplu, lista de mărfuri, dar va fi mai mult). Este pentru controlul unicității sale, atunci când crearea acestui câmp parametru „AUTO_INCREMENT“ a fost setat la el. Acesta include o creștere automată a acestei chei de unul (creștere).

Acum, „culminant al programului“ - câmpul „pid“.

Această abreviere PID - vine de la reducerea „ID-ul părinte“. Mulți, probabil, deja ghicit ce înseamnă.

Pentru restul, voi explica:

„Părinții“ metoda aleasă pentru utilizare recursivitate. Fiecare intrare are mamă. Acest câmp este „BIP“ indică ID-ul părintelui. În cazul în care aceeași „pid“ este zero, înseamnă că elementul nu are nici un părinte, și este la rădăcina „a coloanelor de copac“. De fapt, nu puteți lua zero, și nimic, dar 0 va fi mai convenabil, și, în general, bine acceptat în rândurile de programatori. Acum, în tabel, puteți construi arbori ierarhici cu coloane interminabile (câte vă va permite bazei de date) numărul de niveluri. Pentru recursivitate propriu-zis nu este o problemă.

Acum vine partea cea mai interesanta - recurență de programare PHP.

Să începem cu un citat pe definiția Wikipedia recursivitatii:

Recursie - procesul de repetiție auto similar de elemente mod.

Aceasta este ceea ce vor face. Scrieți o funcție care va „auto-repetarea.“

Acum, procedați în felul următor: da parametrul funcție care indică spre „rădăcinile“ noastre ale structurii (în acest caz zero). Acest lucru ne va oferi o oportunitate în viitor, pentru a afișa un copac pornind de la orice nod. După aceea arată toate „copil“ componente ale parametrului specificat (pe care le trimitem la funcția).

Arată tot de pe ecran va fi în lista „ul“, cu toate că aceasta face ca el vrea, dar cel mai adesea pe site-urile găsite această opțiune.

Acum, toate „cip“ a ideilor recursivitatii: parametrul pentru etapa următoare, vom specifica non-zero, ca la început, și ID-ul elementului următor. Rezultatul este aceasta:

Așa că avem ca rezultat al meniului pe deplin în structura corectă. Rezultatul este am arătat în figură:

Php recursivitate

Acum simpatic modifica pentru a obține link-uri în loc de elemente simple. Imediat, observ că referința am scrie fictiv. Puteți scrie același lucru ceea ce vrei.

De asemenea, doresc să scrie un pic versiunea mea a modului de a executa descărcarea CSS tot drumul spre elementul selectat. Această problemă este de prea multe ori cu care se confruntă programatori novice. Am condimentat totul un stil simplu CSS

Aici, atunci când sunt afișate pe copac pozițiile pe ecran, am format prima matrice cu o listă cu toate id-ul, situat în calea din lista rădăcină (elementul zero) la ID-ul corect (care trece un _GET parametru $ [ „id“]). Acest lucru se face cu ajutorul în timp ce bucla (). Aici cred că nimic prezent complicat.

Apoi, înainte de afișarea Li, am verifica disponibilitatea id-ul curent în matrice (modul în care este transferat la parametrul funcției) preparat în prealabil. Dacă este acolo, atunci variabila $ clasă stabilește un șir de caractere care conține clasa este activă. În caz contrar, un șir gol. Această clasă este introdusă în li. Dacă te uiți atent codul, se poate vedea.

Ca urmare, aceasta este ceea ce avem:

Php recursivitate

Acum vom vedea calea completă la elementul curent. Dar voi merge mai departe și va actualiza script-ul, astfel încât obiectele inutile sunt ascunse. Voi face acest lucru în JavaScript (JQuery). Această metodă mi se pare cel mai acceptabil, deoarece Link-uri index încă motorul de căutare, dar pentru utilizator, acestea nu vor fi afișate.

Pentru aceasta, am „ușor“ modificat funcția noastră.

Dacă te uiți atent, veți vedea modificările:

  1. Am introdus un alt test pentru prima ul
  2. JQuery conectat la biblioteca de la Google
  3. Funcția Insert se prăbușește toate clasa ul fără a activa
  4. Am transmite un parametru la funcția acestei clase pentru a determina structura
  5. Restul detaliilor. Yourself le pot vedea în funcția

Codul funcției JQuery merită o privire mai atentă. El nu a fost deosebit de dificil, dar se va potrivi aproape orice structură de meniu construit pe UL. În plus, după cum am scris mai sus, este ușor de indexat de motoarele de căutare.

Ultimul cod articol complet de lucru și nu necesită nici un fișier de conexiune suplimentar. Dacă aveți o masă gata făcute în baza de date, puteți trimite acum acest script pe site.

Iată o recursie în PHP.