导出子阵列并通过电子邮件发送每个部分

时间:2011-06-21 18:26:23

标签: php multidimensional-array export

我有一个多维数组,如下所示:

Array ( 
    [email1@fake.com] => Array (
        [0] => Array ( 
            [asin] => B004HFS6Z0 
            [title] => Kindle, Wi-Fi, Graphite, 6" Display
            [price] => 114.00 
            [map] => 125.00 ) ) 
    [email2@fake.com] => Array ( 
        [0] => Array ( 
            [asin] => B004CYX17O 
            [title] => Rizzy Home Apple 10-Piece Comforter Set, King 
            [price] => 502.80 
            [map] => 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);        
}

有没有人有任何想法?或者这有意义吗?

1 个答案:

答案 0 :(得分:0)

在您的内部foreach循环中,您正在执行$xls->addRow($subvalue),它会继续添加所有电子邮件子数组。我认为你应该在外部foreach中调用一些函数但是在内部函数之前调用已经添加到$ xls的行。

这是我能想到的测试运行:

  1. 首先打电话到外部foreach - $ email = email1@fake.com
  2. 首先调用内部foearch - 为“email1@fake.com”数组的每个值调用$ xls-&gt; addrow()
  3. 首先调用$ xls-&gt;调用emailFile(),以w +模式打开“email.xls”并将内容写入文件
  4. 第二次打电话给外部foreach - $ email = email2@fake.com
  5. 对内部foearch进行第二次调用 - 为“email2@fake.com”数组的每个值调用$ xls-&gt; addrow()。 注意 - 我认为此时在第2步中添加到$ xls的行仍然存在,这可能是问题所在。如果是,您需要在内部foreach开始之前或在$ this-&gt; buildXLS()方法中进行一些清理
  6. 调用$ xls-&gt;第二次调用emailFile(),以w +模式打开“email.xls”,并将内容写入包含两个子数组值的文件。
  7. 我不确定$ this-&gt; buildXLS()的目的是什么,并且在我上面的解释中忽略了它。

    以上是否有意义?