2017-10-04 19 views
1

我一直在努力挣扎。我有一个文件夹和一个基本的命名命令 - abc-def-xyz.php打印出一个不同方式的数组位

我试图创建一个索引页来自动列出所有的文件。所以:

abc-def-xyz.php 
abc-def-xzz.php 
abb-def-xyz.php 

将在PHP索引页显示为:

abc 
    def 
     <a href="link/to/file">xyz</a> 
     <a href="link/to/file">xzz</a> 
abb 
    def 
     <a href="link/to/file">xyz</a> 

我能到爆炸的文件名和删除扩展的点,那么我只是失去了。任何意见将不胜感激。谢谢!

Array 
(
    [0] => Array (this is applyOnline-alert-warning.php) 
    (
     [0] => applyOnline 
     [1] => alert 
     [2] => warning 
    ) 

    [1] => Array 
    (
     [0] => applyOnline 
     [1] => collectionOrDelivery 
    ) 
) 
+0

不知道为什么你会用一个多维数组打扰。我会对这个集合进行排序,然后将每个文件与之前的文件进行比较。如果最后一部分发生变化,但第一部分和第二部分不变,则写入新条目。如果第二部分更改但第一部分不更改,则写入新的子标题,然后写入新的条目。如果第一部分更改,则写入新的标题,子标题和条目。始终关闭单个条目。当你写一个新的时候关闭副标题和标题。看着你开始和完成逻辑。 –

+0

您的示例数组不一致。第二个元素只有2个项目。第三名在哪里? – gview

+0

你放弃了吗??? – AbraCadaver

回答

1

从这个答案How to write getter/setter to access multi-level array by key names?使用方法:

$array = array(); 

foreach($files as $file) { 
    $temp = &$array; 
    foreach(explode('-', $file) as $key) { 
     $temp =& $temp[pathinfo($key, PATHINFO_FILENAME)]; 
    } 
    $temp = $file; 
} 

产生一个数组,其中关键字名称可用于:

Array 
(
    [abc] => Array 
     (
      [def] => Array 
       (
        [xyz] => abc-def-xyz.php 
        [xzz] => abc-def-xzz.php 
       ) 

     ) 

    [abb] => Array 
     (
      [def] => Array 
       (
        [xyz] => abb-def-xyz.php 
       ) 

     ) 

)