glob - filter - 文件夹名称中的数字字符串

时间:2013-05-29 14:57:10

标签: php

我应该使用什么模式让glob函数只过滤包含数字字符串的文件夹。

这将仅显示带有单个数字的文件夹:

glob('/path/to/files/[0-9]')

多位数字符号或is_numeric为真时的文件夹怎么办?

3 个答案:

答案 0 :(得分:2)

这可以通过glob来实现,虽然很麻烦:

glob('/path/to/files/*{0,1,2,3,4,5,6,7,8,9}*',GLOB_BRACE);

相反,结合一些功能:

array_filter(glob("/path/to/files/*",GLOB_ONLYDIR),function($a) {return preg_match("/\d/",basename($a));}));

答案 1 :(得分:0)

function filterFiles($path, $flag="", $ext="", $regex_pattern="") {
    if ($ext) $ext=".$ext";
    if ($flag=="files") $files=array_filter(glob("$path/*$ext"), "is_file");
    else if ($flag=="dirs") $files=array_filter(glob("$path/*$ext"), "is_dir");
    else $files=glob("$path/*$ext");
    if ($regex_pattern) foreach($files as $i=>$file) {
        if(!preg_match($regex_pattern, basename($file))){
            unset($files[$i]);
        }
    }
    $result=array_values($files);
    return $files;
}



$revPaths=filterFiles($path,"","","/^\d+$/");

答案 2 :(得分:-1)

您将要添加GLOB_ONLYDIR标志:

您需要将其缩小到包含数字和字母或仅包含数字的列表,然后过滤掉包含字母的文件夹。

$files = glob("[0-9]*", GLOB_ONLYDIR);
$final_list = [];
foreach($files as $file){
    if(preg_match("/\d+/", basename($file))){
        $final_list[] = $file;
    }
}
print_r($final_list);