PhP导出.csv从逗号更改分隔符到其他人
问题描述:
我有这个PhP代码在用户点击一个按钮,它会自动下载一个.csv文件,它里面是不同种类的信息。所以这个.csv文件是逗号分隔的,所以只要有一个逗号,指针就会进入下一个单元格。但我想将分隔符更改为逗号以外的任何内容,因为我的某些数据具有逗号,例如“位置”列中包含501A和501B等数据,并且它需要位于单个单元格中。但是,它会转到另一个单元格,因此当我以纵向打印时,id不适合。所以我只是想问一下如何改变分隔符并用逗号来维护数据?谢谢!PhP导出.csv从逗号更改分隔符到其他人
<?php
define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASS", "");
define("DB_NAME", "envoy");
function db_connect() {
$db = mysqli_connect(DB_HOST, DB_USER, DB_PASS) or die("ERROR!");
mysqli_select_db($db, DB_NAME);
return $db;
}
$db = db_connect();
date_default_timezone_set("EST5EDT");
$date = date('m-d-Y,h.i.sa');
$date2 = date('m/d/Y');
$filename = $date.'.csv';
//$fp = fopen($filename,"w");
$sql2 = "SELECT sku as Sku,name as 'Brochure Name',location as Location FROM brochureinfo where modified LIKE '$date2' ORDER BY name ";
$rs2 = mysqli_query($db, $sql2);
$total_records = mysqli_num_rows($rs2);
mysqli_close($db);
if($total_records>0){
$row = mysqli_fetch_assoc($rs2);
$seperator = "";
$comma = "";
foreach ($row as $name => $value){
$seperator.= $comma. ''.str_replace('','""',$name);
$comma=",";
}
$seperator .= "\n";
//echo $seperator;
mysqli_data_seek($rs2,0);
while ($row = mysqli_fetch_assoc($rs2)){
//$seperator = "";
$comma = "";
foreach ($row as $name => $value){
$value = str_replace(array("\r" , "\n", "\r\n", "\n\r") ,'' , $value);
$value = str_replace('</b><br>','',$value);
$value = str_replace('<b>','',$value);
$value = str_replace('<br>','',$value);
$value = str_replace('<br />','',$value);
$seperator.= $comma. ''.str_replace('','""',$value);
$comma=",";
}
$seperator .= "\n";
}
header('Content-Type: text/csv');
header("Content-Disposition: attachment; filename=$date.csv");
header('Pragma: no-cache');
echo $seperator;
}
else{
header('Content-Type: text/csv');
header("Content-Disposition: attachment; filename=$date.csv");
header('Pragma: no-cache');
echo "No record modified today";}
答
您可以CSV格式使用fputcsv()为下一代数据
int fputcsv (resource $handle , array $fields [, string $delimiter = "," [, string $enclosure = '"' [, string $escape_char = "\" ]]])
编辑:
你的代码将看起来somethiing这样的:
<?php
define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASS", "");
define("DB_NAME", "envoy");
function db_connect() {
$db = mysqli_connect(DB_HOST, DB_USER, DB_PASS) or die("ERROR!");
mysqli_select_db($db, DB_NAME);
return $db;
}
$db = db_connect();
date_default_timezone_set("EST5EDT");
$date = date('m-d-Y,h.i.sa');
$date2 = date('m/d/Y');
$filename = $date.'.csv';
$fp = fopen($filename,"w");
$sql2 = "SELECT sku as Sku,name as 'Brochure Name',location as Location FROM brochureinfo where modified LIKE '$date2' ORDER BY name ";
$rs2 = mysqli_query($db, $sql2);
$total_records = mysqli_num_rows($rs2);
mysqli_close($db);
if ($total_records>0) {
$row = mysqli_fetch_assoc($rs2);
$delimiter = ';';
$data = [];
foreach ($row as $name => $value){
$data[] = $name;
}
fputcsv($fp, $data, $delimiter);
mysqli_data_seek($rs2,0);
while ($row = mysqli_fetch_assoc($rs2)){
fputcsv($fp, $row, $delimiter);
}
fclose($fp);
header('Content-Type: text/csv');
header("Content-Disposition: attachment; filename=$date.csv");
header('Pragma: no-cache');
echo $seperator;
}
else {
fclose($fp);
header('Content-Type: text/csv');
header("Content-Disposition: attachment; filename=$date.csv");
header('Pragma: no-cache');
echo "No record modified today";
}
答
使用PHP函数,fputcsv把每一行都作为arr ay(其中每个列的值将成为数组的一个项目),所以你不需要担心内部的逗号。由于您直接下载文件,因此请使用PHP输出作为文件句柄。请记住在输出开始之前设置标题。
$output = fopen('php://output', 'w');
// output the column headings/ values
fputcsv($output, array('Column 1', 'Column 2', 'Column 3');
那么我会替换哪一个?对不起回合愚蠢的问题 – jeeeee
好吧,编辑,见上面 – mnv
谢谢,但我不能使用fopen();因为它会在我的.php文件的文件夹中生成一个文件。但我试图用fopen并删除$ seperator现在它不显示任何东西。 – jeeeee