使用PHP从每个文件夹(如嵌套)中获取文件名

时间:2016-11-19 06:18:15

标签: php file directory

我的目录结构就像

car_brands/AAA/alto.php
car_brands/BBB/figo.php
car_brands/CCC/beat.php

PHP代码

     <?php   
             $dir = "Car_Brands";  
             $dh  = opendir($dir);  
             while (false !== ($filename = readdir($dh))) 
             {     
              $files[] = $filename;  
              }  
              natcasesort($files); 
               foreach ($files as $file) 
                {
                if($file!='.' && $file!='..')   
                {  
                 echo $file;
                } 
               }    
?>

就像我想要的那样

<a href="Car_Brands/<?php echo $file; ?>/"here i want filename of particular folder"" class="btn btn-red" style="width:180px;height:50px;"><br/><?php echo $file; ?><br/></a>

通过这段代码,我可以获得car_brands.like AAA,BBB,CCC下的文件夹,但是如何在单个foreach循环中的每个文件夹下获取php文件名是否有任何简单的方法。

2 个答案:

答案 0 :(得分:4)

<?php 
               foreach ($files as $file) 
                {
                if($file!='.' && $file!='..')   
                {
                $dir_path="Car_Brands/".$file."/";  
  $files_names = implode("",preg_grep('~\.(php)$~', scandir($dir_path)));
                    ?>        
               <div class="col-md-2"><br/>      
               <a href="Car_Brands/<?php echo $file; ?>/<?php 
          echo $files_names; ?>" class="btn btn-red" style="width:180px;height:50px;"><br/><?php echo $file; ?><br/></a>      </div>
               <?php 
               } 
               }    
                ?>

这就是我现在尝试的工作方式,感谢所有帮助我提出新想法的人

答案 1 :(得分:2)

您可以使用scandir获取给定目录中所有文件的列表。

所以,你的代码会改变如下:

         $dir = "Car_Brands";  
         $dh  = opendir($dir);  
         while (false !== ($subdir = readdir($dh))) 
         {   
             $fileList = scandir($dir.'/'.$subdir);
             $files[] = $fileList[2];  
         }  
         natcasesort($files); 
         foreach ($files as $file) 
         {
            if($file!='.' && $file!='..')   
            {  
                 echo $file;
            } 
         }

scandir()返回一个数组,其中包含给定目录中所有文件的列表。如果您在Linux服务器中,并且您确定每个目录只有一个文件,那么您应该从数组的第3个索引获取文件名,在我们的示例中为$fileList[2]。这是第三个索引的原因如果你执行scandir()返回的数组的var转储,你会看到如下所示的内容:

Array
(
    [0] => .
    [1] => ..
    [2] => alto.php
)

我建议您在循环中执行print_r($fileList),这样可以更好地了解要查看的索引。

<强>更新

您也可以使用glob。在这种情况下,您的代码将如下所示:

         $dir = "Car_Brands";
         $dh  = opendir($dir);
         while (false !== ($dirname = readdir($dh)))
         {
             if ($dirname == '..' || $dirname == '.') {
                 continue;
             }
             $subdir = $dir.'/'.$dirname.'/';
             $ext = '*.php';
             $fileList = glob($subdir.$ext);
             if (!empty($fileList)) {
                 $files[] = $fileList[0];
                 // The above line will return the whole path. (eg. car_brands/AAA/alto.php)
                 // if you want the file name only (eg. alto.php) use the below line instead
                 // $files[] = str_replace($subdir, '', $fileList[0]);
             }
         }
         natcasesort($files);
         foreach ($files as $file)
         {
             echo $file;
         }