将php数组汇总到treeview中

时间:2010-02-23 00:18:41

标签: php arrays treeview

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 :(得分:0)

您想要修改breadth-first search。这样可以为您的样本结构提供正确的结果:

<?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

编辑:在您想要键而不是节点值的意义上进行了修改。

答案 1 :(得分:0)

我最近遇到了同样的问题,this article by Kevin van Zonneveld帮助了我。

基本上你必须使用递归函数。查看文章,这就是你需要的东西!