我有一个多维数组,如下所示:
数组([email1@fake.com]=>阵列([0]=>数组([asin]=>B004HFS6Z0[title]=>Kindle,Wi-Fi,Graphite,6英寸显示屏[价格]=>114.00[地图]=>125.00))[email2@fake.com]=>数组([0]=>数组([asin]=>B004CYX17O[title]=>Rizzy Home苹果10件套舒适套装,King[价格]=>502.80[地图]=>520.00))
我想做的是将电子邮件地址下的子数组导出到一个文件中,然后通过电子邮件将其发送到电子邮件地址。到目前为止,我只能将两个子数组导出到一个文件中,还无法覆盖第二个子数组的文件。
这是我正在使用的代码:
require('export-xls.class.php');
$filename = 'email.xls';
$xls = new ExportXLS($filename);
$header[] = "ASIN";
$header[] = "Title";
$header[] = "Retail";
$header[] = "MAP";
$xls->addHeader($header);
//create temp csv file and email from subarray
foreach($map_check2 as $email => $value) {
//$fp = fopen('uploads/email.csv', 'w+');
foreach($value as $subkey => $subvalue) {
//echo $email . "<br>";
//print_r($subvalue) . "<br>";
//fputcsv($fp, $subvalue);
$xls->addRow($subvalue);
}
$xls->emailFile();
}
我需要将其导出到excel文件,并且一直在使用export-xls.class。我本可以使用csv,但数组中的值中会定期出现逗号。
emailFile()是:
public function emailFile() {
#build the xls
$xls = $this->buildXLS();
$fp = fopen("uploads/email.xls", "w+");
fwrite($fp, $xls);
fclose($fp);
}
有人有什么想法吗?或者这有道理吗?
在执行$xls->addRow($subvalue)
的foreach内部循环中,它似乎一直在添加所有电子邮件子数组。我认为应该在外部foreach内部但在内部foreach之前调用一些函数,以清理已经添加到$xls中的行。
这是一个我可以想到的测试运行:
- 第一次调用外部foreach-$email=email1@fake.com
- 对内部fosearch进行第一次调用-为"的每个值调用$xls->addrow()email1@fake.com"数组
- 调用对$xls->emailFile()的第一个调用,以w+模式打开"email.xls"并将内容写入文件
- 对外部foreach进行了第二次调用-$email=email2@fake.com
- 对内部fosearch进行第二次调用-为"email2@fake.com"array。注意-我认为在这一点上,之前在步骤2中添加到$xls的行仍然存在,这可能是问题所在。如果是,您需要在内部foreach开始之前或在$this->buildXLS()方法中进行一些清理
- 调用$xls->emailFile()的第二个调用,以w+模式打开"email.xls",并将内容写入包含两个子数组值的文件
我不确定$this->buildXLS()的目的是什么,在上面的解释中我忽略了它。
以上内容有道理吗?