PHP Определение файла на основе параметров в регулярном выражении - PullRequest
0 голосов
/ 10 ноября 2009

Я пытаюсь определить файл на основе определенных параметров. Во-первых, я рекурсивно перебираю структуру каталогов, такую ​​как:

  • C: / Users / программист / Downloads / рецензии / XBOX
  • C: / Users / программист / Downloads / рецензии / PS3
  • C: / Users / программист / Загрузка / обзоры / GBA

Обратите внимание на тип консольной игры в конце строки. После этого имеем следующее:

  • C: /Users/programmer/Downloads/reviews/XBOX/p123.html
  • C: /Users/programmer/Downloads/reviews/XBOX/r123.html

Если вы заметите во втором разделе, есть один файл с p и один с r.

Моя конечная цель состоит в том, чтобы определить, какие файлы являются p *, а какие r *, поэтому мое регулярное выражение я хотел бы иметь что-то из следующего (псевдокод)

/console/p*/

или

/console/r*/

Итак, мне нужно перебрать файлы и узнать в конце моей функции имя файла И тип файла (p или r), не обращая внимания на тип консоли. Спасибо за помощь

Ответы [ 4 ]

2 голосов
/ 10 ноября 2009

Функция PHP glob будет проходить через каталог, соответствующий всем файлам, которые соответствуют заданным критериям.

$files = array();

foreach(glob("C:/Users/programmer/Downloads/reviews/*/p*.html") as $filename) {
    $files['p'][] = $filename;
}

foreach(glob("C:/Users/programmer/Downloads/reviews/*/r*.html") as $filename) {
    $files['r'][] = $filename;
}

Это даст вам массив, похожий на этот:

array (
    p =>  array (
        0 => p123.htm
        1 => p456.htm
    )

    r => array (
        0 => r123.htm
        1 => r456.htm
    )
)
0 голосов
/ 10 ноября 2009

Предполагая, что вы просто хотите получить списки файлов, отличающиеся по первой букве их имени файла:

Пройдите по дереву каталогов, введите имя файла в переменную, например $ filename.

$ files [$ filename [0]] [] = $ filename;

0 голосов
/ 10 ноября 2009
glob('C:/Users/programmer/Downloads/reviews/*/p*.html');
glob('C:/Users/programmer/Downloads/reviews/*/r*.html');
0 голосов
/ 10 ноября 2009

как

 preg_match('~/([pr])[^/]+$~', $file, $m);
 if($m[1] == 'p') something
 if($m[1] == 'r') something else

// edit: хотя это отвечает на ваш вопрос напрямую, это не самый эффективный способ. В зависимости от того, что вы хотите, лучше использовать glob (), как предлагали другие, или glob () + preg_grep () или, что еще лучше, базу данных вместо файлов. Не могли бы вы рассказать нам больше о том, чего вы пытаетесь достичь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...