2010-02-23 55 views
2
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 
) 

我有上面的數組,我想創建一個treeview顯示.. 有什麼建議嗎?總結php數組到樹狀圖

我想我要闡述furthe我的問題..

我要存儲這些陣列根據陣列的水平..

例子,我想要的東西是這樣的:

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

+0

那麼,這已經是一個樹形視圖,不是嗎? – zneak 2010-02-23 00:27:57

回答

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 

編輯:修改在您需要的鑰匙,而不是節點值的意義。

+0

酷jasonbar ...這正是我想要的。你是明星....但只是想糾正功能名稱BFTraverse在函數本身內的一個小錯誤...假設是BFTraverse而不是BFTtraverse .. :-) – redcoder 2010-02-23 12:40:48