我想重写下面的代码来生成一个字符串。我想把这个字符串附加到一封电子邮件上。它应该以csv文件的形式出现。
$fh = fopen($file,'w');
function __outputCSV(&$vals, $key, $filehandler) {
fputcsv($filehandler, $vals, ';', '"');
}
array_walk($aData, '__outputCSV', $fh);
fclose($fh);
知道的吗?
最明显的偷懒方法是不重写它,而是简单地创建一个临时文件,然后在它上面调用file_get_contents()
。
然而,这会很无聊,所以我将建议一个有争议的过于复杂的方法,但它应该工作得很好,并且将完全在内存中完成:
使用PHP手册中提供的这个类作为如何编写自定义协议处理程序的示例,以及以下示例代码:
function __outputCSV(&$vals, $key, $filehandler) {
fputcsv($filehandler, $vals, ';', '"');
}
stream_wrapper_register("var", "VariableStream");
$myCSVdata = "";
$fh = fopen('var://myCSVdata', 'w');
array_walk($aData, '__outputCSV', $fh);
fclose($fh);
echo $myCSVdata; // Ta Da!
最好的办法是获得一个MIME兼容的电子邮件类,它可以发送带有附件的电子邮件。我记得我以前用过RMail或者phpimemail,你需要谷歌一下。
否则,您将需要学习如何自己构建MIME邮件。但是,尽管这么多麻烦是值得的,我还是建议你去上一个已经为你做过的课程。
编辑:我一开始没有理解你的问题,也许你应该完全重新格式化并更改标题。以下是我的建议:
$data = '';
foreach($aData as $aDataLine) {
foreach($aDataLine as $aDataKey => $aDataField) {
$aDataLine[$aDataKey] = '"'.str_replace('"', '''"', $aDataField).'"';
}
$data .= implode(',', $aDataLine)."'n";
}
//$data contains your CSV
我想我没有忘记任何东西,它应该是开箱运行的…