读取CSV文件行并将值放入数组

时间:2019-08-13 14:22:11

标签: php csv foreach

我有一个包含多行的CSV文件,每行有超过50个值,所有值均用'|'分隔我想将每个这些值存储到数组中。 我第一行将所有值毫无问题地放入数组,但是其余的行则通过单个键传递到数组中,换句话说,其余的行不会分解为这50多个值。 我已经尝试过PHP read CSV file line by lines

这就是我需要的:

Array
(
    [0] => Array
        (
            [0] => SALE
            [1] => FF
            [2] => 17750478
            [3] => 235
            [4] => 2018-01-27T22:16:56
            [5] => 2018-05-13T12:06:11
            [6] => 
        )

    [1] => Array
        (
            [0] => SALE
            [1] => FF
            [2] => 10423478
            [3] => 1006352300
            [4] => 2018-01-27T22:16:56
            [5] => 2018-05-13T12:06:11
            [6] => 
        )

    [2] => Array
        (
            [0] => SALE
            [1] => FF
            [2] => 1204578
            [3] => 1002362300
            [4] => 2018-01-27T22:16:56
            [5] => 2018-05-13T12:06:11
            [6] => 
        )

)

但是我得到了:

Array
(
    [0] => Array
        (
            [0] => SALE
            [1] => FF
            [2] => 17750478
            [3] => 235
            [4] => 2018-01-27T22:16:56
            [5] => 2018-05-13T12:06:11
            [6] => 
        )

    [1] => Array
        (
            [0] => SALE|FF|10423478|1006352300|2018-01-27T22:16:56|2018-05-13T12:06:11........

我做了一个测试,我取出了仅剩下的8和9值,数组终于达到了我想要的值,但是我的文件每行有50多个值。打破每一行的值是否有限制? 我的代码:

               $OrderLines = array();

                $file = fopen($InboundInno.$ACKFile, 'r');
                while (($line = fgetcsv($file, false, '|' )) !== FALSE) {
                     $OrderLines[] = $line;
                }
                fclose($file);

EDIT 我已经注意到,第一行的最后一个值(唯一一个逐个获得所有值的行)在最后一个值中得到一个“。”该循环在第一条车道的最后一个值上添加了一个“。” >

2 个答案:

答案 0 :(得分:1)

好吧,我明白了。

我不知道为什么,但是此代码向我文件的每一行的末尾添加了",就像我之前说的那样。当然,我用外壳($line = fgetcsv($file, 0, '|', ' " ')做了一个测试,什么也没做。 由于我绝望,所以我倒转了机箱,做了($line = fgetcsv($file, 0, '|', " ' "),它可以正常工作。 我不知道为什么PHP会将'当作'对待,但现在可以了。所以希望它能对处于相同情况的任何人有所帮助。这是完整的代码:

while (($line = fgetcsv($file, 0, '|', "'")) !== FALSE) {

      $OrderLines[] = $line;
}
 fclose($file);

答案 1 :(得分:0)

我正在使用类似的方法读取CSV文件:

request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes($"api_key***************:")));