使用奇数封装的// CSV文件// PHP

mrp*_*atg 0 php csv

我有一个我正在使用的CSV文件,所有字段都以逗号分隔.但是一些字段本身包含逗号.在原始CSV文件中,包含逗号的字段用引号封装,如此处所示;

"Doctor Such and Such, Medical Center","555 Scruff McGruff, Suite 103, Chicago IL 60652",(555) 555-5555,,,,something else
Run Code Online (Sandbox Code Playgroud)

我正在使用的代码如下

<?PHP
    $file_handle = fopen("file.csv", "r");
    $i=0;
    while (!feof($file_handle) ) {
        $line = fgetcsv($file_handle, 1024);
        $c=0;
        foreach($line AS $key=>$value){
            if($i != 0){
                if($c == 0){
                    echo "[ROW $i][COL $c] - $value"; //First field in row, show row #
                }else{
                    echo "[COL $c] - $value"; // Remaining fields in row
                }
            }
            $c++;
        }
        echo "<br>"; // Line Break to next line
        $i++;
    }
    fclose($file_handle);
?>
Run Code Online (Sandbox Code Playgroud)

问题是我得到的字段用逗号分成两个字段,这会混淆我应该拥有的列数.

有什么方法可以在引号内搜索逗号并转换它们,或者用其他方式来处理它?

gho*_*g74 6

您可以使用"enclosure"参数.请参阅fgetcsv 文档.

$handle = fopen("file", "r");
if ($handle ) {
    while (($line = fgetcsv($handle, 2048, ",", '"')) !== FALSE) {
      print_r( $line)."\n";
    }
    fclose($handle);
}
Run Code Online (Sandbox Code Playgroud)

输出:

$ cat file
"Doctor Such and Such, Medical Center","555 Scruff McGruff, Suite 103, Chicago IL 60652",(555) 555-5555,,,,something else

$ php test.php
Array
(
    [0] => Doctor Such and Such, Medical Center
    [1] => 555 Scruff McGruff, Suite 103, Chicago IL 60652
    [2] => (555) 555-5555
    [3] =>
    [4] =>
    [5] =>
    [6] => something else
)
Run Code Online (Sandbox Code Playgroud)