PHP в деталях

         

Работа с MySQL. Часть 7. Деревья - часть 3


Для формирования sortorder не нужно рекурсии (хотя можно, и, вероятно, она работать будет даже быстрее). Достаточно пройтись по массиву одним и тем же циклом. В нём, если рубрика не обработана, для неё формируется поле sortorder из поля sort и родительского sortorder. Если родительская рубрика ещё не обработана, поднимается флаг $unprocessed_rows_exist и цикл запускается ещё раз.

mysql_query("LOCK TABLES dir WRITE");

$result = mysql_query("SELECT id, IFNULL(parent,0) as parent FROM dir ORDER BY sites DESC, title");

while ($row = mysql_fetch_array($result)) {

    $count++;

    $data["parent"][$row["id"]] = $row["parent"];

    $data["sort"][$row["id"]] = $count;

}

reset($data);

$unprocessed_rows_exist = true;

while($unprocessed_rows_exist) {

    $unprocessed_rows_exist = false;

    while (list($i, $v) = each($data["parent"])) {

        if(($data["parent"][$i] == 0 !isset($data["sort"][$data["parent"][$i]])) && !isset($data["sortorder"][$i])) {

            $data["sortorder"][$i] = str_pad($data["sort"][$i], $max, "0", STR_PAD_LEFT);

            $data["level"][$i] = 0;

        }

        elseif(!isset($data["sortorder"][$i]) && isset($data["sortorder"][$data["parent"][$i]])) {

            $data["sortorder"][$i] = $data["sortorder"][$data["parent"][$i]]. str_pad($data["sort"][$i], $max, "0", STR_PAD_LEFT);




Содержание  Назад  Вперед