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

在PHP中列出名称以数字开头的目录,php,directory,Php,Directory,以下代码提供了所有目录: print_r(glob('*',GLOB_ONLYDIR)); 12test 1test 2test test 3.0.4.Test 3.0.Test 但我只需要那些以数字开头的(版本号3.0.4、3.0.5等) 我正在考虑使用foreach循环和一些测试条件 还有其他方法吗?您可以使用简单的正则表达式,如构造: foreach(glob('*',GLOB_ONLYDIR) as $directoryname) { if (strstr('0123456

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

print_r(glob('*',GLOB_ONLYDIR));
12test
1test
2test
test
3.0.4.Test
3.0.Test
但我只需要那些以数字开头的(版本号3.0.4、3.0.5等)

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


还有其他方法吗?

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

foreach(glob('*',GLOB_ONLYDIR) as $directoryname)
{
    if (strstr('0123456789',substr($directoryname,0,1))!="")
    {
         //$directoryname starts with a digit
    }
}
print_r(glob("[0-9]*", GLOB_ONLYDIR));
鉴于这些目录:

print_r(glob('*',GLOB_ONLYDIR));
12test
1test
2test
test
3.0.4.Test
3.0.Test
上述glob返回:

Array
(
    [0] => 12test
    [1] => 1test
    [2] => 2test
)
Array
(
    [0] => 3.0.4.Test
)
如果您愿意,可以进一步缩小范围:

print_r(glob("[0-9]\.[0-9]\.[0-9]*", GLOB_ONLYDIR));
鉴于这些目录:

print_r(glob('*',GLOB_ONLYDIR));
12test
1test
2test
test
3.0.4.Test
3.0.Test
上述glob返回:

Array
(
    [0] => 12test
    [1] => 1test
    [2] => 2test
)
Array
(
    [0] => 3.0.4.Test
)
您可能会发现这很有用:

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

print_r(glob("[0-9]*", GLOB_ONLYDIR));
鉴于这些目录:

print_r(glob('*',GLOB_ONLYDIR));
12test
1test
2test
test
3.0.4.Test
3.0.Test
上述glob返回:

Array
(
    [0] => 12test
    [1] => 1test
    [2] => 2test
)
Array
(
    [0] => 3.0.4.Test
)
如果您愿意,可以进一步缩小范围:

print_r(glob("[0-9]\.[0-9]\.[0-9]*", GLOB_ONLYDIR));
鉴于这些目录:

print_r(glob('*',GLOB_ONLYDIR));
12test
1test
2test
test
3.0.4.Test
3.0.Test
上述glob返回:

Array
(
    [0] => 12test
    [1] => 1test
    [2] => 2test
)
Array
(
    [0] => 3.0.4.Test
)
您可能会发现这很有用:

我建议在php中检查目录interator,而不是glob



正如@Mike所说,您也可以使用正则表达式Interator

我建议用php而不是glob签出目录interator



正如@Mike所说,您也可以使用正则表达式Interator

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

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

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

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

或者使用正则表达式过滤器迭代器,以防您需要真正的正则表达式能力(“cos GLOB没有)

$dir_iterator=new directoryinterator('./');
$regex='#^\d.*$';//一些基本的东西
$iterator=newregexiterator($dir\u iterator,$regex);
foreach($dir\u对象的迭代器)
{
如果($dir\u object->isDir())
{
//用它做点什么吧。
echo$dir\u object->getPathname()。“
\n”; } }

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

或使用正则表达式过滤器迭代器,以防您需要真正的正则表达式能力(“cos GLOB没有)

$dir_iterator=new directoryinterator('./');
$regex='#^\d.*$';//一些基本的东西
$iterator=newregexiterator($dir\u iterator,$regex);
foreach($dir\u对象的迭代器)
{
如果($dir\u object->isDir())
{
//用它做点什么吧。
echo$dir\u object->getPathname()。“
\n”; } }

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

哦,这将是一个比glob更好的解决方案,你也可以用它来过滤。因为PHP5.3你也可以使用@RobertPit,我不同意。这完全取决于他想做什么。若他只需要一个目录名数组,
glob()
就可以了。当有一个内置函数为你做的时候,不需要自己实例化一个迭代器并向数组中添加元素。别误会,Glob是一个强大而性感的小函数,它稳定而快速,我的观点是随着时间的推移,随着项目的发展,OOP风格将是我的选择,但如果它是一个一次性的Glob,那就好了。(这一切都取决于应用程序基于什么)。OOP是一个比glob更好的解决方案。您也可以使用。因为PHP5.3您也可以使用@RobertPit。我不同意。这完全取决于他想做什么。如果他只需要一个目录名数组,
glob()
很好。当有一个内置函数为您实现时,无需自己实例化迭代器并将元素添加到数组中。别误会,Glob是一个强大而性感的小函数,它稳定而快速,我的观点是随着时间的推移,随着项目的发展,OOP风格将是我的选择,但如果它是一个只运行一次的Glob w很好。(取决于应用程序的基础)。我知道它会很简单。谢谢。我知道它会很简单。谢谢。