我正在编写一个 PHP 函数,它接受一个文件名数组,如果文件名与用户输入的一组条件不匹配,则从该数组中删除文件名。该函数遍历数组并将每个值与正则表达式进行比较。正则表达式是通过插入来自用户输入的变量而形成的。如果用户没有指定变量,则在变量的位置插入正则表达式通配符。文件名都非常系统化,所以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"
预期结果:
数组仅包含在部分 spot ( YEAR-MONTH-**SECTION**-NUMBER.txt)中具有 L 的文件
结果数组:
{"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"}
喵喵时光机
慕桂英546537