2014-01-25 60 views
0

我目前卡在修改數組「平」到樹的數組結構。平面陣列到樹陣列

我有一個數組類型:

$folders = array(
    array('Name' => 'Archive', 'Value' => 'Archive', 'Attributes' => 32, 'Delimiters' => '/'), 
    array('Name' => 'Folder1', 'Value' => 'Archive/Folder1', 'Attributes' => 32, 'Delimiters' => '/'), 
    array('Name' => 'FolderA', 'Value' => 'Archive/Folder1/DossierA', 'Attributes' => 64, 'Delimiters' => '/'), 
    array('Name' => 'Folder2', 'Value' => 'Archive/Folder2', 'Attributes' => 32, 'Delimiters' => '/'), 
    array('Name' => 'FolderA', 'Value' => 'Archive/Folder2/FolderA', 'Attributes' => 32, 'Delimiters' => '/'), 
    array('Name' => 'FolderB', 'Value' => 'Archive/Folder2/FolderA/FolderB', 'Attributes' => 64, 'Delimiters' => '/'), 
); 

,我會得到一個數組類型:

$treefolders = array(
    array('Name' => 'Archive', 'Value' => 'Archive', 'Attributes' => 32, 'Delimiters' => '/', 'subnode' => 
     array('Name' => 'Folder1', 'Value' => 'Archive/Folder1', 'Attributes' => 32, 'Delimiters' => '/', 'subnode' => 
      array('Name' => 'FolderA', 'Value' => 'Archive/Folder1/FolderA', 'Attributes' => 64, 'Delimiters' => '/') 
     ), 
     array('Name' => 'Folder2', 'Value' => 'Archive/Folder2', 'Attributes' => 32, 'Delimiters' => '/', 'subnode' => 
      array('Name' => 'FolderA', 'Value' => 'Archive/Folder2/FolderA', 'Attributes' => 32, 'Delimiters' => '/', 'subnode' => 
       array('Name' => 'FolderB', 'Value' => 'Archive/Folder2/FolderA/FolderB', 'Attributes' => 64, 'Delimiters' => '/') 
      ) 
     ) 
    ) 
); 

我不知道怎麼去最後的結果。

你能幫我嗎?

回答

0

這是不可能的,在PHP數組中不能用作數組鍵。您只能使用目錄名稱作爲密鑰。

最好的解決方案是改變你創建數組的方式或者重新思考你的代碼和/或數據結構。您的問題可能有更簡單的解決方案,可能會重新提出您的問題。請參閱XY problem

0

對不起,我已經在我的第一篇

這裏做什麼是我的陣列結構「扁平化」:

Array 
(
    [0] => 
     Array 
     (
      'Name' => 'Archive' 
      'Value' => 'Archive' 
      'Attributes' => 32 
      'Delimiters' => '/' 
     )  
    [1] => 
     Array 
     (
      'Name' => 'Folder1' 
      'Value' => 'Archive/Folder1' 
      'Attributes' => 32 
      'Delimiters' => '/' 
     )  
    [2] => 
     Array 
     (
      'Name' => 'FolderA' 
      'Value' => 'Archive/Folder1/DossierA' 
      'Attributes' => 64 
      'Delimiters' => '/' 
     )  
    [3] => 
     Array 
     (
      'Name' => 'Folder2' 
      'Value' => 'Archive/Folder2' 
      'Attributes' => 32 
      'Delimiters' => '/' 
     )  
    [4] => 
     Array 
     (
      'Name' => 'FolderA' 
      'Value' => 'Archive/Folder2/FolderA' 
      'Attributes' => 32 
      'Delimiters' => '/' 
     )  
    [5] => 
     Array 
     (
      'Name' => 'FolderB' 
      'Value' => 'Archive/Folder2FolderA/FolderB' 
      'Attributes' => 64 
      'Delimiters' => '/' 
     )  
) 

而且,我求:

Array 
(
    [0] => 
     Array 
     (
      'Name' => 'Archive' 
      'Value' => 'Archive' 
      'Attributes' => 32 
      'Delimiters' => '/' 
      'SubNode' => 
       Array 
       (
        [0] => 
         Array 
         (
          'Name' => 'Folder1' 
          'Value' => 'Archive/Folder1' 
          'Attributes' => 32 
          'Delimiters' => '/' 
          'SubNode' => 
           Array 
           (
            [0] => 
             Array 
             (
              'Name' => 'FolderA' 
              'Value' => 'Archive/Folder1/DossierA' 
              'Attributes' => 64 
              'Delimiters' => '/' 
             )  
           )  
         )  
        [1] => 
         Array 
         (
          'Name' => 'Folder2' 
          'Value' => 'Archive/Folder2' 
          'Attributes' => 32 
          'Delimiters' => '/' 
          'SubNode' => 
           Array 
           (
            [0] => 
             Array 
             (
              'Name' => 'FolderA' 
              'Value' => 'Archive/Folder2/FolderA' 
              'Attributes' => 32 
              'Delimiters' => '/' 
              'SubNode' => 
               Array 
               (
                [0] => 
                 Array 
                 (
                  'Name' => 'FolderB' 
                  'Value' => 'Archive/Folder2/FolderA/FolderB' 
                  'Attributes' => 64 
                  'Delimiters' => '/' 
                 )  
               )  
             )  
           )  
         )  
       )  
     )  
) 

常它應該是可能的^^