首页 > 解决方案 > fgets 和 in_array 无法正常协同工作

问题描述

我正在开发一个项目,将过滤的文本文件数据逐行导入 SQL 数据库。数据的导入功能正常,但过滤功能不起作用。在故障排除中,我创建了以下代码以查看发生了什么。

$excludeLines = array("Doc #:", 'Title:');

$tempFile = "./temp/" . $_FILES["certFile"]["name"];
    if (move_uploaded_file($_FILES["certFile"]["tmp_name"],  $tempFile)) {
        $importData = fopen($tempFile, "r");
        while(($line=fgets($importData))!==false) {
            if(trim($line) != '' && $line != NULL) {
                if(in_array($line, $excludeLines)) {
                    echo 'Included: ';
                } else {
                    echo 'Not included: ';
                }
                echo $line . "<br>";
            } 
        }
        fclose($importData);
    }

结果是:不包括: 文件编号:

我想看到的:包括: 文档号:

如果有人能指出我正确的方向,将不胜感激。

标签: phpfgets

解决方案


fgets包括行尾,因此您也需要将它们包括在查找数组中...

$excludeLines = array("Doc #:\n", "Title:\n"); // Assuming Unix-like line endings

...或在匹配时剥离它们:

in_array(trim($line), $excludeLines)

推荐阅读