PHP Kutuları olmadan Dosya için CSV yazmak

7 Cevap php

Muhafazaları olmadan bir CSV dosyası bir satır olarak bir dizi yazı için bir yerli işlev veya katı sınıf / kütüphane var mı? Hiçbir şey muhafaza param için geçirilir ise fputcsv " varsayılan olacaktır. Google (fputcsv ilgili sayfalarda bir sürü dönen sonuçlar) beni başarısız ve PEAR'ın kütüphaneleri fputcsv olarak daha fazla veya daha az aynı şeyleri yapmak.

Tam fputcsv gibi çalışır, ama bir şey alanlar tırnaksız kalmasını sağlayacaktır.

şu anda: "field 1","field 2",field3hasNoSpaces

İstenilen: field 1,field 2,field3hasNoSpaces

7 Cevap

Muhafazaları Yukarıdaki hakkında uyarılar geçerlidir, ama onlar sizin use-case için geçerli değildir söyledim.

Sadece böyle bir şey neden kullanamazsınız ben merak ediyorum?

<?php
$fields = array(
    "field 1","field 2","field3hasNoSpaces"
);
fputs(STDOUT, implode($fields, ',')."\n");

chr() fonksiyonu ile çalışır:

fputcsv($f,$array,',',chr(0));

Bu çalışmıyor mu?

fputcsv($fp, split(',', $line),',',' ');

Bunu anladım. car() işlevi Null için ASCII kodu ileterek sadece iyi iş gibi görünüyor.

fputcsv($f, $array, $delimiter, car(0))

Cevaplar için herkese teşekkürler!

Bu benim bir diziye standart CSV koymak için kullanmak ne olduğunu ...

function csv_explode($delim=',', $str, $enclose='"', $preserve=false){
        $resArr = array();
        $n = 0;
        $expEncArr = explode($enclose, $str);
        foreach($expEncArr as $EncItem){
                if($n++%2){
                        array_push($resArr, array_pop($resArr) . ($preserve?$enclose:'') . $EncItem.($preserve?$enclose:''));
                }else{
                        $expDelArr = explode($delim, $EncItem);
                        array_push($resArr, array_pop($resArr) . array_shift($expDelArr));
                        $resArr = array_merge($resArr, $expDelArr);
                }
        }
        return $resArr;
}

Eğer bir foreach döngüsünde istedikleri çıkışı daha sonra yapabilirsiniz.

Hiçbir muhafazaları ile bir CSV dosyası ile olumsuz kullanıcı girişi bir serseri virgül satır gizleyin anlamına gelir. Yani bir CSV satırı yazmadan önce virgül kaldırmak gerekir.

Taşıma CSV ile zor kısmı PHP & yapar muhafazaları, ayrıştırma Değerli ARMUT CSV fonksiyonları. Esasen virgülle ayrılmış sütunlar ve yeni satır ayrılmış satırlar için için bir dosya arıyoruz. Burada basit bir başlangıç ​​noktası var:

<?php
$col_separator= ',';
$row_separator= "\n";

$a= array(
 array('my', 'values', 'are', 'awes,breakit,ome'),
 array('these', 'values', 'also', "rock\nAND\nROLL")
);

function encodeRow(array $a) {
 global $col_separator;
 global $row_separator;
 // Can't have the separators in the column data!
 $a2= array();
 foreach ($a as $v) {
  $a2[]= str_replace(array($col_separator, $row_separator), '', $v);
 }
 return implode($col_separator, $a2);
}

$output= array();
foreach ($a as $row) {
 $output[]= encodeRow($row);
}

echo(implode($row_separator, $output));

?>

NULL değeri büyük olasılıkla çoğu csv ayrıştırıcılarını şok edecek hem de car(0) işe yaramadı.

Ben ilk dosya oluşturmak için fputcsv() kullanarak sona erdi, sonra geçti ve tüm tırnak kaldırıldı. Şık? Işi bitmiş :) Belki, ama bu var değil.