Використання рекурсії в PHP h2>
Дроздовський Михайло p>
Рекурсія - це
звернення функції до самої себе. p>
Багато хто не
розуміють, як же використовувати рекурсію на практиці - мовляв, "що за бред,
функція звертається сама до себе ...
Цього не повинно бути! ". Дійсно, здається дивно і незручно. Ну
що ж, розберемо реальний випадок. p>
Припустимо, нам
необхідно вибудувати дерево записів з бази даних, кожен з яких має
наступні параметри: p>
| uid | ім'я записи | uid батьківського записи | p>
Начебто, все
просто - зробив код типу p>
$ s = mysql_query ( "SELECT * FROM x_table WHERE
parent_id = 0 ", $ conn); p>
while ($ z = mysql_fetch_array ($ s)) ( p>
... p>
$ x = mysql_query ( "SELECT * FROM x_table WHERE
parent_id = ". $ z [" uid "], $ conn); p>
while ($ f = mysql_fetch_array ($ x)) ( p>
... p>
і т.д. p>
) p>
) p>
Але ж
кількість рівнів вкладеності може бути необмеженим! Виходить,
кількість циклів буде нескінченним, довжина коду буде нескінченною ітп. Тобто
зробити нічого не вийде. Як же бути. P>
Деякі
програмісти просидять над цим завданням досить довго. Звичайно, можна зробити
100 циклів, в надії, що такої глибокої вкладеності записів не буде. А якщо
буде? До того ж код з 100 циклами буде плохочітаемим, довгим і дуже
об'ємним. Ну а якщо там з'явиться невелика помилка ... (далі, я думаю,
пояснювати не варто). p>
------------------------- p>
Це завдання
досить легко вирішити за допомогою рекурсії. Пишемо невелику функцію: p>
function tree ($ uid, $ conn) ( p>
$ sql = "SELECT * FROM x_table WHERE
parent_id = $ uid "; p>
$ a = mysql_query ($ sql, $ conn); p>
while ($ x = mysql_fetch_array ($ a)) ( p>
.... якісь
дії ... p>
tree ($ x [ "uid"], $ conn); p>
) p>
) p>
І запускаємо її:
tree (0, $ conn). Все. Складна на вигляд завдання вирішено. P>
Епілог:
з подібним завданням автор зіткнувся при написанні одного веб-додатки на PHP. p>
Список
літератури h2>
Для підготовки
даної роботи були використані матеріали з сайту http://progcpp.narod.ru/
p>