在PHP中列出名称以数字开头的目录

时间:2010-07-06 07:55:17

标签: php directory

以下代码为我提供了所有目录:

print_r(glob('*',GLOB_ONLYDIR));

但我只需要以数字开头的那些(版本号3.0.4,3.0.5等)。

我在考虑使用foreach循环和一些测试条件。

还有其他办法吗?

5 个答案:

答案 0 :(得分:11)

您可以使用简单的类似正则表达式的构造:

print_r(glob("[0-9]*", GLOB_ONLYDIR));

鉴于这些目录:

12test
1test
2test
test

以上的glob返回:

Array
(
    [0] => 12test
    [1] => 1test
    [2] => 2test
)

如果您愿意,可以进一步缩小范围:

print_r(glob("[0-9]\.[0-9]\.[0-9]*", GLOB_ONLYDIR));

鉴于这些目录:

3.0.4.Test
3.0.Test

以上的glob返回:

Array
(
    [0] => 3.0.4.Test
)

您可能会觉得这很有用:
Glob Patterns for File Matching in PHP

答案 1 :(得分:3)

我建议在php中检查目录迭代器而不是glob

http://php.net/manual/en/class.directoryiterator.php

<?php
$iterator = new DirectoryIterator(dirname(__FILE__));
foreach ($iterator as $fileinfo) {
    if ($fileinfo->isDir()) {
        // check if $fileinfo->getFilename() matches your criteria
    }
}
?>

正如@Mike所说,你可以使用正则表达式迭代器。 http://php.net/regexiterator

答案 2 :(得分:0)

foreach(glob('*',GLOB_ONLYDIR) as $directoryname)
{
    if (strstr('0123456789',substr($directoryname,0,1))!="")
    {
         //$directoryname starts with a digit
    }
}

答案 3 :(得分:0)

如果要检索与3.0.4或3.0.5或3.0.10匹配的所有目录, 您可以使用以下代码。

$dirs = glob("[0-9]+\.[0-9]+\.[0-9]+", GLOB_ONLYDIR);

答案 4 :(得分:0)

或者使用Regex Filter迭代器,以防你需要真正的正则表达式('cos GLOB没有)

$dir_iterator = new DirectoryIterator('./');
$regex = '#^\d.*$'; // something really basic for now
$iterator = new RegexIterator($dir_iterator, $regex);

foreach ($iterator as $dir_object)
   {
   if ($dir_object->isDir())
       {
       // Just do something with it.
       echo $dir_object->getPathname()."<br/>\n"; 
       }
   }

我想它可以做得更短,而且可以增强。无论如何,很高兴今天学会了一种新的目录过滤方法;)