Tek kapsül / / PHP ile bir CSV dosyası ile çalışma

2 Cevap php

Ben çalışıyorum bir CSV dosyası var, ve tüm alanları virgülle ayrılmalıdır edilir. Ama kendileri bazı alanları, virgül içerir. Burada görüldüğü gibi ham CSV dosyasında, virgül içeren alanlar, tırnak ile kapsüllü;

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

Ben kullanıyorum kod aşağıda

<?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);
?>

Sorun virgül ben yapmam gerekiyordu sütun sayısını messes iki alana bölünmüş olan alanları alıyorum olduğunu.

Ben tırnak içinde virgül aramak ve onları dönüştürmek olabilir herhangi bir şekilde veya bu ile başa çıkmak için başka bir yol var mı?

2 Cevap

Sen "muhafaza" parametresini kullanabilirsiniz. Bkz fgetcsv documentation.

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

Çıktı:

$ 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
)

Bunu bir virgül içerip her hattı üzerinden arama ve buna göre hareket edebilir:

 foreach($line AS $key => $value){
    if (strpos($value, ',') !== false)
    {
       // there is a comma in this value
    }
    else
    {
       // there is no comma
    }
}