Я пишу функцию PHP, которая принимает массив имен файлов и удаляет имена файлов из массива, если они не соответствуют набору критериев, введенных пользователем. Функция выполняет итерацию по массиву и сравнивает каждое значение с регулярным выражением. Регулярное выражение формируется путем вставки переменных из пользовательского ввода. Если пользователь не указал переменную, вместо переменной вставляются подстановочные знаки регулярного выражения. Имена файлов очень систематичны c, например 2020-06-N-1.txt
, поэтому я точно знаю, сколько символов ожидать в именах файлов и в пользовательском вводе. Однако, когда я запускаю код, имена файлов, которые не соответствуют регулярному выражению, все еще находятся в массиве. Некоторые несовпадающие имена файлов удалены, но многие другие оставлены. Ниже приведены фрагменты моего кода PHP. Приветствуется любая помощь.
function fileFilter() {
global $fileArray, $fileFilterPattern;
/* The loop starts at 2 and goes to count()-1 because the first 2 elements were removed
earlier with unset */
for ($j = 2; $j < count($fileArray) - 1; $j++) {
if(!(preg_match($fileFilterPattern, $fileArray[$j]))) {
unset($fileArray[$j]);
}
}
return;
}
// If user does not provide a filter value, it gets converted into wildcard symbol
if ($month == '') {
$month = '..';
}
if ($year == '') {
$year = '....';
}
if ($section == '') {
$section = '.';
}
$fileFilterPattern = "/{$year}-{$month}-{$section}-.\.txt/";
/* function only runs if user applied at least one filter */
if (!($month == '..' && $year == '....' && $section == '.')) {
fileFilter();
}
Ниже я включил пример того, как массив содержит элементы, которые не совпадают. Я получаю свой выходной массив, используя echo json_encode($fileArray);
Мои входные данные: месяц ""
год ""
раздел "L"
Ожидаемый результат: Массив содержит только файлы с буквой L в месте раздела (YEAR-MONTH-**SECTION**-NUMBER.txt
)
Результирующий массив:
{"8":"2020-06-L-1.txt","9":"2020-06-L-2.txt","10":"2020-06-L-3.txt","11":"2020-06-L-4.txt","12":"2020-06-L-5.txt","15":"2020-06-N-3.txt","16":"2020-06-N-4.txt","17":"2020-06-N-5.txt","18":"2020-06-N-6.txt","19":"2020-06-O-1.txt","20":"2020-06-O-2.txt","21":"2020-06-O-3.txt","22":"2020-06-O-4.txt","23":"2020-06-S-1.txt","24":"2020-06-S-2.txt","25":"2020-06-S-3.txt"}