如何在树枝中显示数组的内容

时间:2016-04-22 21:12:01

标签: php arrays symfony twig

我花了最近3天寻找解决方案:/

我有一个循环目录内容的函数:

我把一些东西放在一起,但它有大量的for循环,所以我在网上搜索并找到了类似的东西,我能够修改以适应我需要的东西:

   require_once "library/Twig/Autoloader.php";
  Twig_Autoloader::register();

  $loader = new Twig_Loader_Filesystem('views/');
  $twig = new Twig_Environment($loader);

$dir = dirname(dirname(__FILE__)) . '/';

  function fileList($dir){
     global $files;
     $files = scandir($dir);
      foreach($files as $file){
          if($file != '.' && $file != '..'){
              if(is_dir($dir . $file)){
                 fileList($dir . $file);
               }
          }
      }
  };

  fileList($dir);

然后我有了这个:

  echo $twig->render('home.twig', array('file' => $files, 'dir' => $dir));

在我的home.twig文件中我有这个:

      <ol>
        {% for key, files in file %}
           <li>{{file[key]}}</li>
        {% endfor %}
      </ol>

我尝试做的是使用页面上的树枝在$ files上显示内容,但我无法绕过它。请帮帮忙?

很奇怪,我注意到当我在函数中添加global $files;时,它只输出第一个目录的内容并停止。无法弄清楚它停止的原因。

1 个答案:

答案 0 :(得分:1)

这是一个稍微改写过的函数版本,它将递归到子文件夹中并将所有内容列在一个扁平数组中:

function fileList($dir, &$files = array()){

    $this_dir = scandir($dir);

    foreach($this_dir as $file){
        if($file != '.' && $file != '..'){
            if(is_dir($dir . $file)){
                fileList($dir.$file.'/', $files);
            } else {
                $files[] = $dir . $file;
            }
        }
    }
}

以下是功能使用的简短示例:

$dir = dirname(dirname(__FILE__)) . '/';
fileList($dir, $files);
echo '<h2>Scanning Directory: '.$dir.'</h2>'; //These two lines are
echo '<pre>'.print_r($files, true).'</pre>'; //just to see the results

然后在树枝输出中,您只需要一个简单的循环来显示它。

  <ol>
    {% for key, files in file %}
        <li>{{file[key]}}</li>
    {% endfor %}
  </ol>