fork(7) download
  1. <?php
  2.  
  3. function parse_paths_of_files($array)
  4. {
  5. $result = array();
  6.  
  7. foreach ($array as $item)
  8. {
  9. $parts = explode('/', $item);
  10. $current = &$result;
  11. for ($i = 1, $max = count($parts); $i < $max; $i++)
  12. {
  13. if (!isset($current[$parts[$i-1]]))
  14. {
  15. $current[$parts[$i-1]] = array();
  16. }
  17. $current = &$current[$parts[$i-1]];
  18. }
  19. $current[] = $parts[$i-1];
  20. }
  21.  
  22. return $result;
  23. }
  24.  
  25. $test = array(
  26. "dir1/dir2/dir3/file.ext",
  27. "dir1/dir2/dir3/file2.ext",
  28. "dir1/dir2/dir3/file3.ext",
  29. "dir2/dir4/dir5/file.ext"
  30. );
  31.  
  32. print_r(parse_paths_of_files($test));
  33.  
  34. ?>
Success #stdin #stdout 0.03s 13112KB
stdin
Standard input is empty
stdout
Array
(
    [dir1] => Array
        (
            [dir2] => Array
                (
                    [dir3] => Array
                        (
                            [0] => file.ext
                            [1] => file2.ext
                            [2] => file3.ext
                        )

                )

        )

    [dir2] => Array
        (
            [dir4] => Array
                (
                    [dir5] => Array
                        (
                            [0] => file.ext
                        )

                )

        )

)