所以我有这段代码:
$datas .= '"' . implode('", "', $body["id"].",".$body["prefecture_id"].",".$body["industry_id"].",".$body["offset"].",".$body["name"].",".$email . ",".$body["tel"].",".$body["fax"].",".$body["address"].",".$body["address_coordinate"].",".$body["url"].",".$body["image_url"].",".$body["flexible_1"].",".$body["flexible_2"].",".$body["flexible_3"].",".$body["flexible_4"].",".$body["flexible_5"].",".$body["flexible_6"].",".$body["flexible_7"].",".$body["flexible_8"].",".$body["flexible_9"].",".$body["flexible_10"].",".$body["sequence"].",".$body["del_flg"].",".$body["create_date"].",".$body["create_user"].",".$body["update_date"].",".$body["update_user"]).'"'."\r\n";
我希望它看起来像这样:
"KN01001","01","4","500","Starbuck's","admin@starbucks.com","09-232-821","09-232-822","Upper G/F SM, Juan Luna Extension"
问题是地址有逗号,所以这会将它分开。
我真的无法正确构建它。请帮忙
此代码来自CSV转换功能。在CSV文件中,每个列都用逗号分隔。
但我的问题是我有几个包含逗号的列。我希望列中的逗号保持不变。
答案 0 :(得分:0)
使用内置的fputcsv()可能更好,而不是滚动自己的CSV编码功能。
$out = fopen("php://memory", "w");
foreach($something as $body) {
fputcsv($out, $body);
}
rewind($out);
$data = stream_get_contents($out);
如果您愿意,您需要调整代码以对列进行排序,但这是基本方法(不要忘记关闭$)。
要将整个CSV保存在内存中(如果这是文件下载/导出机制),您可以打开php://输出,直接写入/刷新到Web服务器/浏览器。
要直接回答你的问题,implode()会将数组作为第二个参数,但是你已经给它一个字符串,所以将它改为此(并添加所有字段):
$datas .= '"' . implode('", "', [$body["id"], $body["prefecture_id"], $body["industry_id"], $body["offset"], ...]) . "\"\r\n";
答案 1 :(得分:0)
你可以使用fgetcsv()而不是implode吗?这将处理
$fileHandle = fopen("filename.csv", "r");
while (($row = fgetcsv($fileHandle, 0, ",")) !== FALSE) {
var_dump($row);
//$row is an array of all the columns in the csv regardless of commas in the dat
}
否则,如果你必须使用implode,那么在语音标记中包含逗号的数据是:“某个日期,带逗号”。如果是这样,您可以使用正则表达式忽略语音标记中的逗号。我无法看到您的数据,因此很难说。