我正在尝试过滤掉此数组中的一些文件夹:
Array
(
[2] => 20151113_152308.jpg
[3] => 20160524_173033.jpg
[4] => 20160810_100405.jpg
[5] => 20160816_142932.jpg
[6] => 20160817_135507.jpg
[7] => 20170203_145901.jpg
[8] => 20170203_151235.jpg
[9] => Afbeelding-ifone-131.jpg
[10] => Afbeelding-ifone-508.jpg
[11] => Bestratingswerkzaamheden
[12] => Mvc-161.jpg
[13] => Rioleringswerkzaamheden
[14] => SANY0016.jpg
[15] => SANY0036.jpg
[16] => SANY0060.jpg
[17] => SANY0132.jpg
[18] => SANY0133.jpg
[19] => SANY0158.jpg
[20] => SANY0159.jpg
[21] => SANY0361.jpg
[22] => Zeefwerkzaamheden
)
您可以看到数组中有文件,但也有一些文件夹(无扩展名)。我尝试使用is_dir()
过滤掉它们。
使用以下代码:
<?PHP
//Base path
$pad = "/home/studione/public_html/_extern/website/cms/images/beeldbank/".$alias."";
//Get everything from above path
$directories = array_diff(scandir($pad), array('.', '..', 'index.html'));
// Print array of above
echo '<pre>';
print_r($directories);
echo '</pre>';
foreach($directories as $image){
if(!is_dir($image){
$impressieslider .= '
<div class="col-md-3">
<a class="impressiegallerij" href="cms/images/beeldbank/'.$alias.'/'.$image.'">
'.$directory.'
<img src="cms/images/beeldbank/'.$alias.'/'.$image.'" class="d-block img-fluid gallerypageimg" alt="">
</a>
</div>';
}
}
echo impressieslider;
?>
但是我仍然在页面上看到文件夹,为什么?每当数组到达文件夹时,我也尝试在循环内回显字符串,但是我什么也没看到。我在做什么错了?
答案 0 :(得分:1)
有一个简单的函数可以检查PHP中是否有目录:is_dir()
函数(https://www.php.net/manual/de/function.is-dir.php)。
这是一个简单的解决方案:
$path = ''; // must be the path to the directory you want to check
$files_only = array_filter($directories, function($file_or_directory) use ($path) {
// make sure you have the correct full path here with the realpath() function
if(!is_dir(realpath($path . DIRECTORY_SEPERATOR . $file_or_directory))) {
return true;
}
return false;
});
如果您只想通过命名来进行过滤,那是不可能的,因为其中有些文件没有扩展名,而目录名中带有点。如果无法访问此目录,则无法确定是否仅滤除正确的内容。
答案 1 :(得分:0)
这是您可以做的事情。 (但这不是一个完美的解决方案,如果您的目录包含(。)字符,它将无法正常工作)
foreach($directories as $image){
$is_file = explode('.', $image);
if(count($is_file) > 1 ) { //you can check either this file exist or not.
$impressieslider .= '
<div class="col-md-3">
<a class="impressiegallerij" href="cms/images/beeldbank/'.$alias.'/'.$image.'">
'.$directory.'
<img src="cms/images/beeldbank/'.$alias.'/'.$image.'" class="d-block img-fluid gallerypageimg" alt="">
</a>
</div>';
}
}
echo impressieslider;
答案 2 :(得分:0)
您可以通过简单的方式完成
$dirPath = 'path/to/images/';
foreach(glob($dirPath.'*.{jpg,JPG,jpeg,JPEG,png,PNG}',GLOB_BRACE) as $file){
$imgs[] = basename($file);
}