Список каталогов на PHP, где имя начинается с цифры

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

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

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

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

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

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

 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 для сопоставления файлов в PHP

Я бы порекомендовал проверить каталог-посредник в 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

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

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

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

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

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