用fopen()跳过空白行;

时间:2014-04-28 02:58:10

标签: php mysql phpmyadmin

我目前有一些这样的代码:

$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文件的内容,不包括所有名称所在的第一行。我希望只能提取已填充的行。我将如何使用此代码?

3 个答案:

答案 0 :(得分:1)

如果行为空,则fgetcsv返回一个由单个null组成的数组 http://www.php.net/manual/en/function.fgetcsv.php

所以你应该可以根据它进行检查。

if ($data[0]===null) 
{ 
    continue;
}

或类似的东西

答案 1 :(得分:0)

基于documentationfgetcsv将返回一个由空行的单个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);