2013-12-05 2 views
0

У меня есть скрипт, который будет искать каталог и хранить дерево файлов в массив ниже:Перебор многомерного массива для вывода пути к файлам в массиве

$dir = ABSPATH."/uploads"; 
    function getDirectoryTree($outerDir , $x){ 
     $dirs = array_diff(scandir($outerDir), Array(".", "..")); 
     $dir_array = Array(); 
     foreach($dirs as $d){ 
      if(is_dir($outerDir."/".$d) ){ 
       $dir_array[ $d ] = getDirectoryTree($outerDir."/".$d , $x); 
      }else{ 
       if (($x)?ereg($x.'$',$d):1) 
        $dir_array[ $d ] = $d; 
       } 
      } 
      return $dir_array; 
     } 

     $dirlists = getDirectoryTree($dir); 

    Array 
(
    [2013] => Array 
    (
     [adamson] => Array 
      (
       [1] => Array 
        (
         [tester.pdf] => tester.pdf 
        ) 

       [11] => Array 
        (
         [tester.pdf] => tester.pdf 
        ) 

      ) 

     [danaenus] => Array 
      (
       [1] => Array 
        (
         [tester.pdf] => tester.pdf 
        ) 

      ) 

     [richardgregson] => Array 
      (
       [9] => Array 
        (
         [tester.pdf] => tester.pdf 
        ) 

      ) 

     [rik] => Array 
      (
       [1] => Array 
        (
         [tester.pdf] => tester.pdf 
        ) 

       [2] => Array 
        (
         [tester.pdf] => tester.pdf 
        ) 

      ) 

    ) 

[2014] => Array 
    (
     [rik] => Array 
      (
       [1] => Array 
        (
         [tester.pdf] => tester.pdf 
        ) 

      ) 

    ) 

) 

Я хочу, чтобы все из массива: потребности в данных чтобы быть похожим на «WEBSITENAME.COM/uploads/2013/rik/1/tester.pdf»

Я хочу перебрать массив, чтобы получить URL-адрес файла ... Новая работа с многомерными массивами, чтобы любое руководство будь здорово!

Спасибо!

+0

Какой файл? Дайте нам пример вывода 'print_r ($ dirlists)' и укажите, что вы пытаетесь извлечь из массива. – jszobody

+0

просим форматировать и отступать от вашего кода. Мы любим помогать, но частью этого является то, что вы можете легко прочитать его. –

+0

Don3e Я хочу всю информацию из массива, я добавил образец выше, из чего должен быть выход. – Rik89

ответ

0

просто напечатать массив с var_dump

как

var_dump($dirlists); 

теперь вы должны увидеть структуру, когда вы знаете структуру, которую вы можете легко найти способ, чтобы вырыть вещи, которые нужно

попробовать этот

function getDirectoryTree($outerDir, &$filePaths, $x) { 
    $dirs = array_diff(scandir($outerDir), Array(".", "..")); 
    $dir_array = Array(); 
    foreach ($dirs as $d) { 
     if (is_dir($outerDir . "/" . $d)) { 

      $dir_array[$d] = getDirectoryTree($outerDir . "/" . $d, $filePaths, $x); 

     } else { 
      if (($x) ? ereg($x . '$', $d) : 1) 
       $filePaths[] = $outerDir . "/" . $d; 
       $dir_array[$d] = $d; 
     } 
    } 

    return $dir_array; 
} 
$filePaths = array(); 
$dirlists = getDirectoryTree($dir, $filePaths); 
var_dump(filePaths); 
+0

Когда вы говорите «alot», иерархия создается на основе того, когда файл был загружен, поэтому год (это будет всего лишь 2 папки еще на один год), а в пользовательских папках (будет всего 20 пользователей), а затем 12 папок в течение месяцев в каждой пользовательской папке – Rik89

+0

после того, как вы выбросите var_dump, он станет более очевидным, вы должны изменить getDirectoryTree, чтобы возвращать список подкаталогов вместо создания нового –

+0

, эта функция не то, что мне нужно, это затрудняет отображение данных правильно, так как мне нужны заголовки для 2013 года, а затем в месяцах ниже, а затем ссылка на файл. Как я могу пройти через массив, который я изначально разместил? – Rik89

Смежные вопросы