我的目录结构就像
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文件名是否有任何简单的方法。
答案 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;
}