Использование рекурсии в PHP

1820
знаков
0
таблиц
0
изображений

Дроздовский Михаил

Рекурсия — это обращение функции к самой себе.

Многие не понимают, как же использовать рекурсию на практике — мол, "что за бред, функция обращается сама к себе... Этого не должно быть!". Действительно, кажется странновато и неудобно. Ну что же, разберем реальный случай.

Допустим, нам необходимо выстроить дерево записей из базы данных, каждый из которых имеет следующие параметры:

| uid | имя записи | uid родительской записи |

Вроде, все просто — сделал код типа

$s = mysql_query("SELECT * FROM x_table WHERE parent_id=0", $conn);

while ($z = mysql_fetch_array($s)) {

...

$x = mysql_query("SELECT * FROM x_table WHERE parent_id=".$z["uid"], $conn);

while ($f = mysql_fetch_array($x)) {

...

и т.д.

}

}

Но ведь количество уровней вложенности может быть неограниченным! Получается, количество циклов будет бесконечным, длина кода будет бесконечной итп. Т.е. сделать ничего не получится. Как же быть.

Некоторые программисты просидят над этой задачей довольно долго. Конечно, можно сделать 100 циклов, в надежде, что такой глубокой вложенности записей не будет. А если будет? К тому же код с 100 циклами будет плохочитаемым, длинным и очень объемным. Ну а если там появится небольшая ошибка... (дальше, я думаю, объяснять не стоит).

-------------------------

Эту задачу достаточно легко решить с помощью рекурсии. Пишем небольшую функцию:

function tree($uid, $conn) {

$sql = "SELECT * FROM x_table WHERE parent_id=$uid";

$a = mysql_query($sql, $conn);

while($x = mysql_fetch_array($a)) {

.... какие-то действия...

tree($x["uid"], $conn);

}

}

И запускаем ее: tree(0, $conn). Все. Сложная на вид задача решена.

Эпилог: с подобной задачей автор столкнулся при написании одного веб-приложения на PHP.

Список литературы

Для подготовки данной работы были использованы материалы с сайта http://progcpp.narod.ru/


Информация о работе «Использование рекурсии в PHP»
Раздел: Информатика, программирование
Количество знаков с пробелами: 1820
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
27624
3
2

... учеников 1. Организационный момент Здравствуйте. Сегодня мы будем говорить о том, как работать с графикой при помощи языка программирования Pascal. Вы уже знакомы с различными типами графики. Какие это типы? (растровый и векторный) Как задается графический объект при использовании графики этих типов. Pascal поддерживает вывод на экран и векторной и растровой графики, но мы рассмотри ...

Скачать
308601
37
3

... производительных сил, тем быстрее повышается Б. населения. В еще большей степени Б. связано с эффективностью социально-экономической политики в данном обществе. Информатика как наука. Предмет и объект прикладной информатики. Системы счисления Инфоpматика — это основанная на использовании компьютерной техники дисциплина, изучающая структуру и общие свойства информации, а также закономерности и ...

Скачать
374863
43
0

... интерфеса и интерфейса локольной сети ·     Предложение о выборе вариантов загрузки При этом возможен вариант запгрузки как с SCSI устройства (диск, CDROM, лента, …) так и через локальную сеть. Загрузочный диск должен быть предварительно сконфигурирован. Так как обьем Boot ROM не может быть большим, в его задачи входит загрузка вторичного загрузчика ...

Скачать
135776
0
0

... у власти выборных лиц, обязательное обновление выборных органов и т. п.» И Зазнобин, и Петров интенсивно использует идею «Теории заговора» [85] без попытки критически ее переосмыслить [86] Иудаизм Если Новая Парадигма Мировоззрения – НПМ кажется вам сложной для восприятия, то я хотел бы вас спросить, читали ли вы, хотя бы, Фритьофа Капру, например, «Скрытые связи». [22] По мере работы над НПМ ...

0 комментариев


Наверх