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

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


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

вопрос
Привет ребят подскажите как получить уровень вложенности комментария по 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 комментариев

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

ПафНутиЙ - 29 июня 2015 20:27 -

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

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

LVio
Юзер

LVio - 29 июня 2015 20:29 -

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

LVio
Юзер

LVio - 29 июня 2015 20:37 -

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

LVio
Юзер

LVio - 29 июня 2015 20:52 -

ПафНутиЙ,
А как с 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);

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

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

ПафНутиЙ - 29 июня 2015 21:28 -

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

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

LVio
Юзер

LVio - 29 июня 2015 21:30 -

ПафНутиЙ,
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 - 29 июня 2015 21:31 -

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

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

ПафНутиЙ - 29 июня 2015 21:32 -

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

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

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

LVio
Юзер

LVio - 29 июня 2015 21:34 -

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

LVio
Юзер

LVio - 29 июня 2015 22:05 -

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

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

LVio
Юзер

LVio - 29 июня 2015 22:11 -

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

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

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

наверх