Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在细枝中显示数组的内容_Php_Arrays_Symfony_Twig - Fatal编程技术网

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

Php 如何在细枝中显示数组的内容,php,arrays,symfony,twig,Php,Arrays,Symfony,Twig,我花了三天时间寻找解决方案:/ 我有一个函数,可以循环遍历目录的内容: 我把一些东西放在一起,但它有大量的for循环,所以我在网上搜索,找到了一些类似的东西,我可以根据需要进行修改: require_once "library/Twig/Autoloader.php"; Twig_Autoloader::register(); $loader = new Twig_Loader_Filesystem('views/'); $twig = new Twig_Environmen

我花了三天时间寻找解决方案:/

我有一个函数,可以循环遍历目录的内容:

我把一些东西放在一起,但它有大量的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));
      <ol>
        {% for key, files in file %}
           <li>{{file[key]}}</li>
        {% endfor %}
      </ol>
在我的home.twig文件中,我有以下内容:

  echo $twig->render('home.twig', array('file' => $files, 'dir' => $dir));
      <ol>
        {% for key, files in file %}
           <li>{{file[key]}}</li>
        {% endfor %}
      </ol>

{%用于密钥,文件%中的文件}
  • {{file[key]}
  • {%endfor%}
    我想做的是使用页面上的细枝显示$files上的内容,但我无法将我的头缠绕在上面。请帮忙


    奇怪的是,我注意到当我添加
    global$文件时在函数内部,它只输出第一个目录的内容并停止。无法找出它停止的原因。

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

    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
    
    $dir=dirname(dirname(_文件__))。/;
    文件列表($dir,$files);
    echo“扫描目录:”.$dir.”//这两条线是
    回显“”。打印($files,true)。“”//只是为了看看结果
    
    然后在细枝输出中,您只需要一个简单的循环来显示它

    
    {%用于密钥,文件%中的文件}
    
  • {{file[key]}
  • {%endfor%}
    ohh真棒!!这更有道理。我尝试了你的建议,它是有效的,但只适用于第一组文件,循环的一部分,它检查它是否是一个目录,因为一些奇怪的原因没有运行,所以我认为
    is_dir()
    没有运行的原因是因为
    $files
    是一个数组,它没有循环通过它。我想你只需要
    如果(is_dir($dir./'.$file)){
    hmmm,当我
    echo$dir./'.$file;
    我在行尾得到
    ///Array
    而不是文件名。当我得到
    echo$dir.$file[3]
    我得到了文件路径很酷,这能解决递归问题并显示所有文件吗?我假设您使用递归函数是因为您也想在子文件夹中显示文件,对吗?