Php рекурсия
Днес бих искал да говоря по темата за рекурсия в PHP.
Повече от сто начинаещите програмисти PHP озадачени над прояви на структури от директории на няколко нива. Такива системи често се използват за повечето сайтове имат меню. Един пример може да се види на фигурата.
В тази цифра тя е представена като йерархия от директории. Разработването на такава директория на системата на сървъра, който описах в статия сканиране на сървъра dirrektory на. Все още можете да го представи, както следва:
Тази фигура показва меню онлайн магазин, всички формира един и същ метод на рекурсия.
Работа с рекурсия само на пръв поглед изглежда трудно. Всъщност, всичко е много по-лесно, отколкото изглежда, само трябва да се помни няколко правила:
- Винаги е необходимо да се предвиди условие за освобождаването на рекурсия. В противен случай, вашият сървър ще виси. И това не е най-приятното следствие.
- Няма нужда да го усложни, попълнете го условия, проверки и т.н. Необходимо е да се мисли предварително, защото Рекурсия - процедура много ресурси.
- Трябва ясно да се разбере в главата, което прави програмата по всяко време.
Сега нека да се създаде база данни тест за нашия въображаем електронен магазин. За да направите това, изпълнете следната заявка:
Веднага след създаването на масата, изпълнете следната заявка, че ще попълни данните си за пример за рекурсия работа в PHP:
Сега Нека разгледаме получената маса, като в същото време се говори за схема на такава система рекурсия.
Резултатът е таблица, която показва следната фигура:
Такава структура на таблицата - минималният брой проби за анализ на работата на рекурсия в PHP.
Да започнем от самото начало.
Невярно е "номер" - уникален идентификатор за всеки запис. Имаме нужда от него за нещо, което можем да направим това пълно референтна точка (например, в списъка на стоките, но то ще бъде повече). Тя е за контрола на своята уникалност при създаването на тази област "auto_increment" параметър е настроен към него. Тя включва автоматично увеличение на този ключ от един (увеличение).
Сега "Гвоздеят на програмата" - полето "PID".
Това съкращение PID - идва от намаляване на "родител ID". Много вероятно вече сте предположили какво означава.
За останалата част, ще обясня:
метод "Родители", избрана за използване рекурсия. Всеки запис има своя родител. Това поле е "PID" указва идентификационния номер на родителя. Ако една и съща "PID" е нула, това означава, че артикулът е без майка, и това е в основата "на колоните на дърветата". В действителност, не можеш да вземеш на нула, и всичко друго, но 0 ще бъде по-удобно, и като цяло добре приети в редиците на програмистите. Сега, в таблицата, може да се изгради йерархични дървета с безкрайни колони (колко ще ви позволяват вашата база данни) брой нива. За правилно рекурсия не е проблем.
Сега идва най-интересната част - програмиране рекурсивно да PHP на.
Да започнем с един цитат на определението на Уикипедия на рекурсия:
Рекурсия - процесът на самостоятелно подобен повторение на елементи начин.
Това е, което ще направим. Напишете функция, която ще "самостоятелно повтаря."
Сега, направете следното: дам на параметъра на функцията, който сочи към нашите "корени" на структурата (в този случай нула). Това ще ни даде възможност в бъдеще да се покаже едно дърво като се започне от всеки възел. След това се покаже на всички "дете" компоненти на определен параметър (които ние изпращаме на функцията).
Покажи всички на екрана ще бъде в списъка на "ул", въпреки че това не прави както той иска, но по-често в сайтовете че тази опция.
Сега всички "чип" на идеите на рекурсия: параметъра за следващата стъпка, посочено от нас не е нула, както в началото, както и идентификацията на следващия елемент. Резултатът е това:
Така че ние имаме като резултат от пълното меню в правилната структура. Резултатът е съм показано на фигурата:
Сега симпатичен го променят, за да получите връзки, вместо прости предмети. Веднага ще отбележа, че позоваването пиша измислен. Можете да напишете същото, което искате.
Аз също искам да напиша малко моята версия за това как да се изпълни CSS разряд по целия път до избрания елемент. Този проблем е много често се сблъскват начинаещите програмисти. Аз се овкуси всичко прост CSS стил
Тук, при показването им на дървото на позиции екран, за първи път, образуван масива със списък на всички идентификатор, който се намира по пътя от списъка с корен (нула елемент) към правилния номер (който преминава параметър $ _GET [ 'номер']). Това се прави с помощта на време () цикъл. Тук мисля, че нищо сложно момента.
След това, преди показването ли, аз се провери наличието на текущата идентификация в масива (начина, по който се прехвърля към параметъра на функцията), приготвен по-рано. Ако тя е налице, тогава променливата $ клас задава низ, съдържащ класа е активен. В противен случай, празен низ. Този клас е поставена в Ли. Ако се вгледате внимателно кода, може да се види.
В резултат, това е това, което имаме:
Сега ние виждаме пълния път до текущия елемент. Но аз ще отида по-далеч и ще актуализира сценария, така че ненужните елементи са скрити. Аз ще направя това в JavaScript (JQuery). Този метод се намери най-приемлив, понеже Връзки още индекса на търсачката, но за потребителя, те няма да бъдат показани.
За това, че "леко" модифициран нашата функция.
Ако се вгледате внимателно, ще видите промените:
- Аз въведе друг тест за първи UL
- JQuery включен от библиотеката на Google
- Поставете функция свива всичко ул клас без активното
- I предава параметър за функцията на този клас да се определи структурата
- Останалата част от детайлите. Yourself да ги видите в функцията
функция код JQuery струва по-отблизо. Той не беше особено трудно, но тя ще се побере почти всяка структура на менюто построен на ул. Плюс това, както писах по-горе, това е лесно да се индексират от търсачките.
Последният кода в статията напълно работа и не изисква никакви допълнителни файлове за свързване. Ако имате готова таблица в базата данни, сега можете да изпратите този скрипт към вашия сайт.
Ето една рекурсия в PHP.