كتابة CSV إلى ملف بدون مرفقات في PHP
سؤال
هل هناك وظيفة أصلية أو فئة/مكتبة صلبة لكتابة مصفوفة كسطر في ملف 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))
وشكرا لجميع الأجوبة!