суммировать массив php в дерево - PullRequest
2 голосов
/ 23 февраля 2010
Array
(
    [00000000017] => Array
        (
            [00000000018] => Array
                (
                    [00000000035] => I-0SAYHADW4JJA
                    [00000000038] => I-RF10EHE25KY0
                    [00000000039] => I-8MG3B1GT406F
                )

            [00000000019] => I-7GM4G5N3SDJL
        )

    [00000000025] => Array
        (
            [00000000011] => I-HT34P06WNMGJ
            [00000000029] => I-U5KKT1H8J39W
        )

    [00000000040] => I-GX43V2WP9KPD
    [00000000048] => I-XM526USFJAH9
    [00000000052] => I-M414RK3H987U
    [00000000055] => I-GABD4G13WHX7
)

У меня есть вышеуказанный массив, и я хочу создать отображение дерева. Любая рекомендация?

Полагаю, мне нужно уточнить вопрос ..

Я хочу сохранить эти массивы в соответствии с уровнем массива ..

Пример, я хочу, чтобы что-то выглядело так:

[level_1] => 00000000017,00000000025,00000000040, 00000000048, 00000000052
[level_2] => 00000000018,00000000019, 00000000011, 00000000029
[level_3] => 00000000035, 00000000038, 00000000039

Ответы [ 2 ]

0 голосов
/ 23 февраля 2010

Я недавно столкнулся с той же проблемой, и эта статья Кевина ван Зонневельда помогла мне.

В основном вы должны использовать рекурсивную функцию. Проверьте статью, это то, что вам нужно!

0 голосов
/ 23 февраля 2010

Вы хотите изменить поиск в ширину . Это имеет правильные результаты для вашей структуры образца:

<?php

function BFTraverse(&$tree = NULL, $depth = 0)
{
    if (empty($tree))
      return FALSE;

    $keys = array_keys($tree);
    $struct["lvl_$depth"] = $keys;

    foreach ($keys as $key)
    {
        if (is_array($tree[$key]))
        {
            $struct = array_merge_recursive($struct, BFTraverse($tree[$key], $depth + 1));
        }
    }

    return $struct;
}

$data = array
('00000000017' => array
        (
            '00000000018' => array
                (
                    '00000000035' => 'I-0SAYHADW4JJA',
                    '00000000038' => 'I-RF10EHE25KY0',
                    '00000000039' => 'I-8MG3B1GT406F'
                ),

            '00000000019' => 'I-7GM4G5N3SDJL'
        ),

    '00000000025' => array
        (
            '00000000011' => 'I-HT34P06WNMGJ',
            '00000000029' => 'I-U5KKT1H8J39W'
        ),

    '00000000040' => 'I-GX43V2WP9KPD',
    '00000000048' => 'I-XM526USFJAH9',
    '00000000052' => 'I-M414RK3H987U',
    '00000000055' => 'I-GABD4G13WHX7'
 );

$var = BFTraverse($data);
$i = 0;

foreach ($var as $level)
    echo "Level " . ++$i . ': ' . implode(', ', $level) . "\n";
?>

Вывод:

Level 1: 00000000017, 00000000025, 00000000040, 00000000048, 00000000052, 00000000055
Level 2: 00000000018, 00000000019, 00000000011, 00000000029
Level 3: 00000000035, 00000000038, 00000000039

edit: изменено в том смысле, что вам нужны ключи, а не значения узлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...