Php .csv文件有问题,缺少逗号

Php .csv文件有问题,缺少逗号,php,csv,fgetcsv,Php,Csv,Fgetcsv,大家好,我有一个通过PHP代码打开CSV的问题。我的PHP代码是: <?php header("Content-Type: text/html; charset=windows-1251"); echo "<html> <head> <title></title> </head> <body> "; $file = "import.csv"; if(file_exists($file)) { if

大家好,我有一个通过PHP代码打开CSV的问题。我的PHP代码是:

<?php
header("Content-Type: text/html; charset=windows-1251");

echo "<html>
<head>
    <title></title>
</head>
<body>
";

$file = "import.csv";

if(file_exists($file)) {
    if (($fopen = fopen($file, "r")) !== FALSE) {
        echo "<table>\n";
        while (($data = fgetcsv($fopen, 1024, ",")) !== FALSE) {
            $max = count($data);
            $num++;
            echo "<tr>\n<td>".$num."</td>\n";
            for ($i=0;$i<$max;$i++) {
                echo "<td>".$data[$i]."</td>\n";
            }
            echo "</tr>\n";
        }
        echo "</table>";
        fclose($fopen);
    }
}
else {
    echo "File doesn't exists!";
}

echo "
</body>
</html>";
?>

如果您无法控制传入的CSV,则无法使用fgetcsv。它怎么知道是否有一个丢失的

不幸的是,您必须编写自己的函数来处理此问题。我首先将每一行读入一个数组。然后在这行中循环并用逗号将其分解。然后,您必须检查每个值,并尝试确定结果数组中是否缺少某些内容

让我们看看您的示例中有问题的一行

Six, Sfamily, Male, 1967, 9876542
以下是我们对它的了解:

它包含的值比所有其他值少一个,因此我们应该对它运行一些数据一致性检查。 我们知道第一个和第二个值将是不等于男性或女性的字符串。 我们知道第三个值应该总是等于男性或女性。 我们知道第四个值是一年,应该是一个数值。 我们知道第五个值丢失了,它应该是一个城市代码,长度将始终为两个字母。
根据这些信息,您应该能够编写一些检查,以确定其中一个值是否不等于预期值,然后进行修复。

问题最有可能与以下行有关:

Six, Sfamily, Male, 1967, 9876542

没有城市信息的地方。在这种情况下,除非您应用一些逻辑来确定这不是城市,并跳到下一列,否则您永远不会在电话列中显示9876542。但是,您应该做的是,在每行中有6列,而不是每次都重置$max,您应该在读取标题后设置它一次。然后显示您读取的每行中的列数。

有什么问题?从描述中我不理解代码的工作原理,并且正确地显示了内容-那么问题出在哪里?您是否将数据包含在引号中?您的意思是您希望fgetcsv识别出城市在六个方面缺失,SF家庭,男性,1967,9876542。。。你假设计算机有高度的智能。。。这是你必须自己解决的问题如果文件不是一个格式良好的csv文件,我认为在其解析过程中出现意外行为是正常的,无需读取为字符串并分解。。。使用fgetcsv正常读取,然后使用foreach循环,并使用array_splice将任何不符合规则的数据推入插槽
<?php
header("Content-Type: text/html; charset=windows-1251");

echo "<html>
<head>
    <title></title>
</head>
<body>
";

$file = "import.csv";

if(file_exists($file)) {
    if (($fopen = fopen($file, "r")) !== FALSE) {
        echo "<table>\n";
        while (($data = fgetcsv($fopen, 1024, ",")) !== FALSE) {
            $num++;
            echo "<tr>\n<td>".$num."</td>\n";
            foreach($data as $k => $v) {
                switch ($k) {
                    case 0 : // first name
                    case 1 : // family
                    case 2 : // sex
                    case 4 : // city
                        if (is_numeric($v)) {
                            array_splice($data,$k,0,'');
                        }
                        break;
                    case 3 : // date of birth
                    case 5 : // phone number
                        if (!is_numeric($v)) {
                            array_splice($data,$k,0,'');
                        }
                        break;
                }
            }
            foreach($data as $v) {
                echo "<td>".$v."</td>\n";
            }
            echo "</tr>\n";
        }
        echo "</table>";
        fclose($fopen);
    }
}
else {
    echo "File doesn't exists!";
}

echo "
</body>
</html>";
?>
<?php
header("Content-Type: text/html; charset=windows-1251");

echo "<html>
<head>
    <title></title>
</head>
<body>
";

$file = "import.csv";

if(file_exists($file)) {
    if (($fopen = fopen($file, "r")) !== FALSE) {
        echo "<table>\n";
        while (($data = fgetcsv($fopen, 1024, ",")) !== FALSE) {
            $num++;
            echo "<tr>\n<td>".$num."</td>\n";
            foreach($data as $k => $v) {
                switch ($k) {
                    case 0 : // first name
                    case 1 : // family
                    case 2 : // sex
                    case 4 : // city
                        if (is_numeric($v)) {
                            array_splice($data,$k,0,'');
                        }
                        break;
                    case 3 : // date of birth
                    case 5 : // phone number
                        if (!is_numeric($v)) {
                            array_splice($data,$k,0,'');
                        }
                        break;
                }
            }
            foreach($data as $v) {
                echo "<td>".$v."</td>\n";
            }
            echo "</tr>\n";
        }
        echo "</table>";
        fclose($fopen);
    }
}
else {
    echo "File doesn't exists!";
}

echo "
</body>
</html>";
?>