大家好我在使用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>";
?>
问题不在PHP代码中,问题出在.csv文件中。当代码以正常方式显示信息时,即使缺少逗号,PHP代码也必须正常工作。
.csv文件:
First name,Family,Sex,Date of birth,City,Phone number
One, Ofamily, Male, 1975, LA,13-25-16
Two, Tfamily, Male, 1955, LV, 555-14345
Three, Thfamily, Male, 1958, NY, 15689
Four, Ffamily, Female, 1974, SF, 5897912
Five, Fifamily, Male, 1991, LA, 123456789
Six, Sfamily, Male, 1967, 9876542
Seven, Sefamily, Female,, SF,
答案 0 :(得分:0)
如果您无法控制传入的CSV,则无法使用fgetcsv
。怎么知道是否缺少,
?
不幸的是,你将不得不编写自己的函数来处理这个问题。我首先将每一行读入一个数组。然后循环遍历该行并用逗号explode
对它们进行循环。然后,您将必须检查每个值并尝试确定结果数组中是否缺少某些东西。
让我们看看你的例子中有问题的一行。
Six, Sfamily, Male, 1967, 9876542
以下是我们对它的了解:
根据这些信息,您应该能够编写一些检查来确定其中一个值是否与您期望的值不相符,然后进行修复。
答案 1 :(得分:0)
这个问题很可能与以下几行有关:
Six, Sfamily, Male, 1967, 9876542
没有城市信息的地方。在这种情况下,除非您应用某些逻辑来确定这不是城市,否则您永远不会将“9876542”显示在电话列中,并跳到下一列。你应该做什么,这样你每行有6列,而不是每次都重置$ max,你应该在阅读标题后设置一次。然后显示您读取的每一行的列数。
答案 2 :(得分:0)
<?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>";
?>