以下代码为我提供了所有目录:
print_r(glob('*',GLOB_ONLYDIR));
但我只需要以数字开头的那些(版本号3.0.4,3.0.5等)。
我在考虑使用foreach
循环和一些测试条件。
还有其他办法吗?
答案 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";
}
}
我想它可以做得更短,而且可以增强。无论如何,很高兴今天学会了一种新的目录过滤方法;)