我目前有一些这样的代码:
$handle = fopen($_FILES['file']['tmp_name'], "r");
$i = 0;
while (($data = fgetcsv($handle, 1000, ",")) !== false) {
if($i > 0) {
$sql = "
insert into TABLE(A, B, C, D)
values ('$data[0]', '$data[1]', '$data[2]', '$data[3]')
";
$stmt = $dbh -> prepare($sql);
$stmt->execute();
}
$i++;
}
fclose($handle);
这允许我在某个表中写入CSV文件的内容,不包括所有名称所在的第一行。我希望只能提取已填充的行。我将如何使用此代码?
答案 0 :(得分:1)
如果行为空,则fgetcsv返回一个由单个null组成的数组 http://www.php.net/manual/en/function.fgetcsv.php
所以你应该可以根据它进行检查。
if ($data[0]===null)
{
continue;
}
或类似的东西
答案 1 :(得分:0)
基于documentation,fgetcsv
将返回一个由空行的单个null
值组成的数组,因此您应该能够针对该值测试返回值并跳过空白那条线。
以下示例代码将跳过处理空白行。请注意,我已经更改了文件并删除了一些其他逻辑,以使其更易于测试。
<?php
$handle = fopen("LocalInput.txt", "r");
$i = 0;
while (($data = fgetcsv($handle, 1000, ",")) !== false) {
if($data== array(null)) continue;
var_dump($data);
$i++;
}
fclose($handle);
?>
答案 2 :(得分:0)
fgetcsv()为空行返回一个null数组,以便您可以执行以下操作。
$handle = fopen($_FILES['file']['tmp_name'], "r");
$i = 0;
while (($data = fgetcsv($handle, 1000, ",")) !== false) {
if (array(null) === $data) { // ignore blank lines
continue;
}
if($i > 0) {
$sql = "
insert into TABLE(A, B, C, D)
values ('$data[0]', '$data[1]', '$data[2]', '$data[3]')
";
$stmt = $dbh -> prepare($sql);
$stmt->execute();
}
$i++;
}
fclose($handle);