PHP CSV到数组 - 当一个为空时继续读取字段

时间:2018-02-08 20:03:05

标签: php arrays csv

我喜欢这个CSV:

SqlConnection myConnection = new SqlConnection();

        SqlConnectionStringBuilder bu = new SqlConnectionStringBuilder();
        bu.DataSource = @"<server>";
        bu.InitialCatalog = "<database>";
        bu.IntegratedSecurity = false; 
        bu.UserID = "<user id>";
        bu.Password = "<password>";

        myConnection.ConnectionString = bu.ConnectionString;

        try
        {
            myConnection.Open();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }

当我将CSV转换为这样的数组时:

1|bla.jpg|nature
2|       |earth

然后我在while (($line = fgetcsv($handle, 1000, ';')) !== FALSE) { $data[] = $line; } 中得到关注数组:

$data

但我需要这样:

array(2) {
  [0]=>
  array(3) {
    [0]=>
    string(1) "1"
    [1]=>
    string(7) "bla.jpg"
    [2]=>
    string(6) "nature"
  }
  [1]=>
  array(1) {
    [0]=>
    string(163) "2"
  }
}

如果一个字段为空,我如何继续解析CSV?

忽略它:我需要添加更多文字-.-

4 个答案:

答案 0 :(得分:1)

设置正确的分隔符

while (($line = fgetcsv($handle, 1000, '|')) !== FALSE)

demo

答案 1 :(得分:0)

也许不要使用fgetcsv,但是读取整行并使用explode(';', $line)分割每个逗号(或任何其他合适的分隔符; csv文件通常使用;但也可以使用,或tab)< / p>

答案 2 :(得分:0)

对我来说,这段代码按预期工作,

你应该尝试:

  • 阅读其他CSV文件

  • 检查CSV文件的编码是否正确(我认为它应该是UTF-8编码)

  • 检查,文件中的分隔符与代码中的分隔符相同

查看php文档: http://php.net/manual/en/function.fgetcsv.php

  

注意:如果PHP在阅读时没有正确识别行结尾   Macintosh计算机上或由Macintosh计算机创建的文件,启用   auto_detect_line_endings运行时配置选项可能会有所帮助   解决问题。

也许这个问题与用于创建此CSV文件的操作系统有关?

答案 3 :(得分:0)

使用file()将其作为数组读取,然后用“;”分解每一行。

// For demo purpose
$str = "1;bla.jpg;nature
        2;;earth";
$arr = explode(PHP_EOL, $str);
// End
// $arr = file("file.csv");

Foreach($arr as &$line) $line = explode(";", $line);

Var_dump($arr);

https://3v4l.org/9FdVQ

由于目前尚不清楚。

$arr = file("file.csv");

Foreach(array_splice($arr,0,10) as &$line) $line = explode(";", $line);

Var_dump($arr);