سؤال

هل هناك وظيفة أصلية أو فئة/مكتبة صلبة لكتابة مصفوفة كسطر في ملف CSV بدون مرفقات؟ fputcsv سوف الافتراضي ل " إذا لم يتم تمرير أي شيء لمعلمة الضميمة.لقد خذلتني Google (عرض النتائج لمجموعة كاملة من الصفحات حول fputcsv)، وتقوم مكتبات PEAR بنفس الأشياء تقريبًا fputcsv.

شيء يعمل تماما مثل fputcsv, ، ولكن سيسمح للحقول بالبقاء غير مسعرة.

حالياً: "field 1","field 2",field3hasNoSpaces

مرغوب: field 1,field 2,field3hasNoSpaces

هل كانت مفيدة؟

المحلول

والتحذيرات حول مرفقات سبق صحيحة، ولكن كنت قد قال أنها لا تنطبق على استخدامك حدة.

وأنا أتساءل لماذا لا يمكنك فقط استخدام شيء مثل هذا؟

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

نصائح أخرى

يعمل مع مركز حقوق الإنسان () وظيفة:

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

وfputcsv($file, $data, ';', chr(127));

ولا هذا العمل؟

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

وحسنا car(0) لم ينجح في مسعاه حيث بلغت قيمة NULL من المرجح أن خنق موزعي الأكثر CSV.

وانتهى باستخدام fputcsv() لبناء الملف الأولي، ثم توجه من خلال وإزالة جميع العملات. أنيق؟ ربما لا، ولكن حصلت على هذه المهمة:)

<?php       

$filename = "sample.csv";
$handle = fopen($filename, 'w+');
fputcsv($handle, ['column 1','column 2']);
$data = ['sample','data'];

fputs($handle, implode($data,',')."\n");

// or

fwrite($handle, implode($data,',')."\n");

fclose($handle);
$headers = array(
    'Content-Type' => 'text/csv',
);

وأنا استخدم طريقة صعبة لإزالة اقتباس مزدوجة، ولكن فقط في لينكس

....
fputcsv($fp, $product_data,"\t");
....
shell_exec('sed -i \'s/"//g\' /path/to/your-file.txt ');

وهذا هو ما يمكنني استخدام لوضع CSV القياسية في صفيف ...

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;
} 

ويمكنك بعد ذلك إخراج كل ما تريد في حلقة foreach.

والجانب السلبي مع ملف CSV مع عدم وجود مرفقات يعني أن فاصلة المخطئين في إدخال المستخدم ل Munge الصف. لذلك ستحتاج إلى إزالة الفواصل قبل كتابة على التوالي CSV.

والجزء صعبة مع التعامل مع CSV وتحليل العبوات، الأمر الذي يجعل وظائف PHP والكمثرى CSV قيمة. أساسا كنت تبحث عن ملف موجود للأعمدة وفواصل السطر الجديد لصفوف بفواصل. وهنا نقطة البداية بسيطة:

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

?>

chr(0) عملت أيضا بالنسبة لي:

 fputcsv($fp, $aLine, $sDelimiter, chr(0));

وترد عليها. بواسطة التمرير في رمز ASCII خالية إلى وظيفة car() يبدو أن تعمل على ما يرام.

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

وشكرا لجميع الأجوبة!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top