Технический сбой

Сайт временно работает в режиме только для чтения, идут восстановительные работы. Приносим свои извинения за неудобства.
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как получить уровень вложенности комментария?

Как получить уровень вложенности комментария?


     Общие вопросы по PHP, MySQL    1996

вопрос
Привет ребят подскажите как получить уровень вложенности комментария по id, тоесть если массив будет таков


array(
    0 = array(

        id => 1
        pid => 0
            0 => array(

                id => 2
                pid => 1
            )
            1 => array(
                id => 21
                pid => 2
            )
                0 => array(
                    [color=#FF0000]id => 22[/color]
                    pid => 21
                )
                    0 => array(
                        id => 23
                        pid => 22
                    )
    )
)


А id к примеру 22 то как получить его вложенность? Вложенность должна получится [3]

Ответил: ПафНутиЙ


<?
function getLevel(&$arr, $id) {
    $level = 0;
    while ($id) {
        $index = null;
        foreach ($arr as $i => $row) {
            if ($row['id'] == $id) {
                $index = $i;
                break;
            }
        }
        $id = null;
        if ($index !== null) {
            $id = $arr[$index]['pid'];
            if ($id) {
                $level++;
            }

        }
    }
    return $level;
}
$arr = [
    0 => [
        'id'  => 11,
        'pid' => 0,
    ],
    1 => [
        'id'  => 15,
        'pid' => 11,
    ],
    2 => [
        'id'  => 45,
        'pid' => 15,
    ],
    3 => [
        'id'  => 22,
        'pid' => 45,
    ],
    4 => [
        'id'  => 48,
        'pid' => 22,
    ],
    5 => [
        'id'  => 33,
        'pid' => 48,
    ],

];

echo getLevel($arr, 48);

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

ПафНутиЙ
Админ

ПафНутиЙ - -

А вы уверены в правильности построенного массива?

Каков вопрос - таков и ответ. Просто помните об этом.

LVio
Юзер

LVio - -

Нет ну я к примеру, если что то не правильно исправьте)))

LVio
Юзер

LVio - -

Блин ПафНутиЙ,
Спасибо огромное помог то что надо)))

LVio
Юзер

LVio - -

ПафНутиЙ,
А как с mysql получить пробую


$resultq = $db->query("SELECT id, parent FROM dle_comments");

$new_array[] = $row;

while ($row = $db->get_array($result)) {
    $new_array[$row['id']] = $row;
    $new_array[$row['parent']] = $row;
}


echo getLevel($new_array, 5);

но что то не получается? Помоги)))

ПафНутиЙ
Админ

ПафНутиЙ - -

для начала следует вывести
print_r($new_array);

Каков вопрос - таков и ответ. Просто помните об этом.

LVio
Юзер

LVio - -

ПафНутиЙ,
Array
(
    [0] => Array
        (
            [0] => 301
            [id] => 301
            [1] => 0
            [parent] => 0
        )

    [302] => Array
        (
            [0] => 303
            [id] => 303
            [1] => 302
            [parent] => 302
        )

    [301] => Array
        (
            [0] => 301
            [id] => 301
            [1] => 0
            [parent] => 0
        )

    [303] => Array
        (
            [0] => 303
            [id] => 303
            [1] => 302
            [parent] => 302
        )

)

LVio
Юзер

LVio - -

Он мне выводит 1 а нужно 2

ПафНутиЙ
Админ

ПафНутиЙ - -

$db->super_query("SELECT id, parent FROM dle_comments", true);

вернёт готовый массив.

Каков вопрос - таков и ответ. Просто помните об этом.

LVio
Юзер

LVio - -

Вообще вывел
Array ( [0] => )

LVio
Юзер

LVio - -

Все решил спасибо))))))) Если кому то надо то вот ответ

while ($row = $db->get_array($resultq)) {
    //$new_array[$row['id']] = $row;    <-   Это удаляем и все ОК!!!
    $new_array[$row['parent']] = $row;
}

LVio
Юзер

LVio - -

А вот вопрос еще на засыпку все хорошо но одно но, как сделать чтобы все что идет после 5, тоесть там 6,7,8,... и так далее заменялись на 5, то есть вложенность до 5 а после заменялись на 5...

Похожие вопросы

наверх