PHP: функция рекурсивного массива - PullRequest
1 голос
/ 02 июня 2010

Я хочу создать функцию, которая возвращает полный путь от заданного узла обратно к корневому значению. Я пытался сделать рекурсивную функцию, но мне не повезло. Что было бы подходящим способом сделать это? Я предполагаю, что рекурсивная функция является единственным способом?

Вот массив:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Root category
            [_parent] => 
        )

    [1] => Array
        (
            [id] => 2
            [name] => Category 2
            [_parent] => 1
        )

    [2] => Array
        (
            [id] => 3
            [name] => Category 3
            [_parent] => 1
        )

    [3] => Array
        (
            [id] => 4
            [name] => Category 4
            [_parent] => 3
        )
)

Результат, который я хочу, чтобы моя функция выводила при получении полного пути к идентификатору узла # 4:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Root category
            [_parent] => 
        )

    [1] => Array
        (
            [id] => 3
            [name] => Category 3
            [_parent] => 1
        )

    [2] => Array
        (
            [id] => 4
            [name] => Category 4
            [_parent] => 3
        )
)

печально известный пример моих рекурсивных навыков:

    function recursive ($id, $array) {

        $innerarray = array();
        foreach ($array as $k => $v) {

            if ($v['id'] === $id) {
                if ($v['_parent'] !== '') {
                    $innerarray[] = $v;
                    recursive($v['id'], $array);
                }
            }

        }
        return $innerarray; 
    }

1 Ответ

4 голосов
/ 02 июня 2010

Предполагая, что "id" в вашем подмассиве означает, что индекс подмассива + 1 внутри родительского массива (в противном случае вам потребуется каждый раз выполнять поиск в массиве), вы можете сделать это:

$searchNode = 4;
while ($searchNode)
{
    $result[] = $nodes[$searchNode - 1];
    $searchNode = $nodes[$searchNode - 1]["id"];
}
$result = array_reverse($result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...