Следующий код дает мне все каталоги:
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"; } }
Я предполагаю, что это можно сделать немного короче, и это может быть усилено. Во всяком случае, я рад, что сегодня понял новый подход к фильтрации каталогов;)