Список каталогов в PHP, где имя начинается с цифры - PullRequest
1 голос
/ 06 июля 2010

Следующий код дает мне все каталоги:

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

Но мне нужны только те, которые начинаются с цифры (номера версий 3.0.4, 3.0.5 и т. Д.).

Я думал об использовании петли foreach и некоторых условиях испытаний.

Есть ли другой способ сделать это?

Ответы [ 5 ]

11 голосов
/ 06 июля 2010

Вы можете использовать простые конструкции, подобные регулярным выражениям:

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

С учетом этих каталогов:

12test
1test
2test
test

Вышеприведенный глобус возвращает:

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

Вышеприведенный глобус возвращает:

Array
(
    [0] => 3.0.4.Test
)

Вы можете найти этополезно:
Шаблоны глобусов для сопоставления файлов в PHP

3 голосов
/ 06 июля 2010

Я бы рекомендовал проверить интегратор каталогов в 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, вы также можете использовать Regex Interator. http://php.net/regexiterator

0 голосов
/ 06 июля 2010

Или с помощью итератора Regex Filter, если вам нужна реальная мощность регулярного выражения (потому что 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"; 
       }
   }

Я думаю, что это можно сделать немного короче, и это можно улучшить. В любом случае, рад, что сегодня узнал новый подход к фильтрации каталогов;)

0 голосов
/ 06 июля 2010

Если вы хотите получить все каталоги, которые соответствуют 3.0.4, или 3.0.5, или 3.0.10, вы можете использовать следующий код:

$dirs = glob("[0-9]+\.[0-9]+\.[0-9]+", GLOB_ONLYDIR);
0 голосов
/ 06 июля 2010
foreach(glob('*',GLOB_ONLYDIR) as $directoryname)
{
    if (strstr('0123456789',substr($directoryname,0,1))!="")
    {
         //$directoryname starts with a digit
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...