2012-04-17 126 views
0

我无法从文件夹数组创建文件夹结构类数组。从文件夹列表递归地创建文件夹数组

这是函数接收

Array 
(
[0] => Array 
    (
     [id] => 6 
     [name] => 2011 
     [parent_folder] => 1 
    ) 

[1] => Array 
    (
     [id] => 5 
     [name] => 2012 
     [parent_folder] => 1 
    ) 

[2] => Array 
    (
     [id] => 7 
     [name] => April 
     [parent_folder] => 6 
    ) 

[3] => Array 
    (
     [id] => 2 
     [name] => Folder2 
     [parent_folder] => 
    ) 

[4] => Array 
    (
     [id] => 1 
     [name] => Folder1 
     [parent_folder] => 
    ) 
) 
阵列

输出应该其中子文件夹下的partent_folder的阵列

Array 
(
[0] => Array 
    (
     [id] => 2 
     [name] => Folder2 
     [parent_folder] => 
    ) 

[1] => Array 
    (
     [id] => 1 
     [name] => Folder1 
     [parent_folder] => 
     [content] => Array 
      (
       [0] => Array 
        (
         [id] => 6 
         [name] => 2011 
         [parent_folder] => 1 
         [content] => Array 
          (
           [0] => Array 
            (
             [id] => 7 
             [name] => April 
             [parent_folder] => 6 
            ) 
          ) 
        ) 

       [1] => Array 
        (
         [id] => 5 
         [name] => 2012 
         [parent_folder] => 1 
        ) 

      ) 
    ) 
) 

我试图围绕内的关键“内容”存储为数组的数组但不能让它工作。必须有一个递归的方式来重新排列数组。任何人都可以帮忙吗? 将不胜感激!

+0

如何获取文件列表? – RageD 2012-04-17 14:15:04

+0

可能的重复[如何将一系列父子关系转换为分层树?](http://stackoverflow.com/questions/2915748/how-can-i-convert-a-series-of-parent -child-relationships-into-a-hierarchical-tre) - 请不要粘贴'print_r',而是'var_export'。 – hakre 2012-04-17 14:21:32

+0

@RageD mysql数据库 – danielheinrich 2012-04-17 14:33:51

回答

0

你需要的东西设置是这样的:

function look_through_array($array) { 
for ($i=0; $i<sizeof($array); $i++) { 
    if (is_array($array[$i])) 
     look_through_array($array[$i]); 
    else 
     create_folder($array[$i]); 
} 
} 

function create_folder($array) { 
    # make a folder 
} 
1

比方说,你原来的数组被称为

$tree; 

每个元素在里面是一个数组,有三个已命名的条目:

  1. id - 代表自己 - 进一步称为$idName,
  2. name - 一些字符串 - 名为$parentName进一步,
  3. parent - 代表母公司 - 进一步名为$childrenName

从平成移调树,每个孩子必须能够解决它的父。因此,创建一个临时数组,通过它的id为每个树元素都有一个别名。我的名字是不久$t和创建它:

foreach ($tree as $k => $v) 
    $t[$v[$idName]] = &$tree[$k]; 

由于现在孩子们可以分配给它的父(如果家长不FALSE)感谢这个别名表,重新安排是相当直截了当:

foreach ($tree as $k => $v) 
    if (($p = $v[$parentName]) && ($t[$p][$childrenName][] = &$t[$v[$idName]])) 
     unset($tree[$k]); 

后这样做了,不需要别名表中的任何时间更长,可以取消设置:

unset($t); 

的瞧,树已准备就绪:

var_dump($tree); 

输出:

array(2) { 
    [3]=> array(3) { 
    ["id"]=> string(1) "2" 
    ["name"]=> string(7) "Folder2" 
    ["parent_folder"]=> NULL 
    } 
    [4]=> array(4) { 
    ["id"]=> string(1) "1" 
    ["name"]=> string(7) "Folder1" 
    ["parent_folder"]=> NULL 
    ["content"]=> array(2) { 
     [0]=> array(4) { 
     ["id"]=> string(1) "6" 
     ["name"]=> string(4) "2011" 
     ["parent_folder"]=> string(1) "1" 
     ["content"]=> array(1) { 
      [0]=> array(3) { 
      ["id"]=> string(1) "7" 
      ["name"]=> string(5) "April" 
      ["parent_folder"]=> string(1) "6" 
      } 
     } 
     } 
     [1]=> array(3) { 
     ["id"]=> string(1) "5" 
     ["name"]=> string(4) "2012" 
     ["parent_folder"]=> string(1) "1" 
     } 
    } 
    } 
} 
0

我知道这个问题是旧的,但所提供的答案并没有为我工作。解决方案的第一部分来自hakre的答案。这是我最终做的:

global $t; 

foreach ($tree as $key => $value){ 
    $idName = $value['id']; 
    $t[$idName] = $tree[$key]; 
} 

foreach ($t as $key => $value){ 
    //echo $value['name'] . '<br />'; 
    $t[$key]['uri'] = recursiveArray($value).'/'.$value['name']; 
    //echo '<br />'; 
} 

function recursiveArray($value) { 
    global $t;  

     if ($value['parentId'] != 0){    
      $parentName = $t[$value['parentId']]['name']; 
      //$parentId = $value['parentId']; 
      return recursiveArray($t[$value['parentId']]).'/'.$parentName; 
     }   
     return ''; 
} 

tree是一个数组,看起来就像OP的数组。结果是不同的,因为替代嵌套数组,嵌套的文件以每个数组的uri值返回。

[76] => Array 
    (
     [id] => 76 
     [parentId] => 17 
     [name] => Evite Templates 
     [uri] => /Resources/Tools and Forms/General Tools and Forms/Countdown Events/Evite Templates 
    ) 

[79] => Array 
    (
     [id] => 79 
     [parentId] => 90 
     [name] => Celebration Meeting 
     [uri] => /Resources/Tools and Forms/General Tools and Forms/Celebration Meeting 
    ) 

[80] => Array 
    (
     [id] => 80 
     [parentId] => 90 
     [name] => Recruitment Meeting 
     [uri] => /Resources/Tools and Forms/General Tools and Forms/Recruitment Meeting 
    ) 
相关问题