如何用fgetcsv忽略逗号

时间:2016-08-17 09:54:29

标签: php csv

我试图读取CSV文件并将其转换为这样的数组。

$h = fopen("onderdelen-test.csv", "r");

echo '$parts = array(';

if($h) {
    while (($data = fgetcsv($h, 1000)) !== FALSE) {
        foreach ($data as $num) {
            $part = explode(';', "$num");

            echo "array('partid' => '$part[0]', ";
            echo "'descr' => '$part[1]'), ";
        }
    }
    fclose($h);
}

echo ')';

csv看起来像这样

123456 ; partdescription
234567 ; partdescription, anotherdescription
345678 ; part, description and some other description

问题是它也会在逗号上爆炸,而不仅仅在分号上爆炸。 我尝试在描述中添加引号,但确实在描述中放了一些我无法摆脱的奇怪的问号。

编辑1: 如果我在fgetcsv函数中使用分号作为分隔符,那么我无法通过键检索值,只要每次分号都会启动另一个循环。

2 个答案:

答案 0 :(得分:2)

保持简单,因为您要做的就是在进行更大的事情之前看看从这个输入中产生了什么

123456 ; partdescription
234567 ; partdescription, anotherdescription
345678 ; part, description and some other description

此代码,请注意我已将第三个参数添加到fgetcsv

<?php
$h = fopen("onderdelen-test.csv", "r");

if($h) {
    while (($data = fgetcsv($h, 1000, ';')) !== FALSE) {
        print_r($data);
        echo "partid = " . trim($data[0]) . "\n";
        echo "descr  = " . trim($data[1]) . "\n";
    }
    fclose($h);
}

生成此输出

Array
(
    [0] => 123456
    [1] =>  partdescription
)
partid = 123456
descr =  partdescription
Array
(
    [0] => 234567
    [1] =>  partdescription, anotherdescription
)
partid = 234567
descr =  partdescription, anotherdescription
Array
(
    [0] => 345678
    [1] =>  part, description and some other description
)
partid = 345678
descr =  part, description and some other description

答案 1 :(得分:0)

解析csv文件的简单代码段:

    $i=0; $keys=array(); $output=array();
    $handle=fopen("onderdelen-test.csv", "r");
    if ($handle){
        while(($line = fgetcsv($handle,0,';')) !== false) {
            $i++;
            if ($i==1) {
                $keys=$line;
            } elseif ($i>1){
                $attr=array();
                foreach($line as $k=>$v){
                    $attr[trim($keys[$k])]=$v;
                }
                $output[]=$attr;
            }
        }
        fclose($handle);
    }

    //$output here is your data array

在这里,您将从csv文件获取关联数组,其中包含来自第1行文件的键。

    id ; description
123456 ; partdescription
234567 ; partdescription, anotherdescription
345678 ; part, description and some other description

产生的数组:

Array
(
    [0] => Array
        (
            [id] => 123456 
            [description] =>  partdescription
        )

    [1] => Array
        (
            [id] => 234567 
            [description] =>  partdescription, anotherdescription
        )

    [2] => Array
        (
            [id] => 345678 
            [description] =>  part, description and some other description
        )

)

你的echo事情确实有点错误。