Экспорт Subarray и по электронной почте каждый раздел - PullRequest
0 голосов
/ 21 июня 2011

У меня есть многомерный массив, который выглядит так:

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 голосов
/ 21 июня 2011

Кажется, что в вашем внутреннем цикле foreach, где вы делаете $xls->addRow($subvalue), он продолжает добавлять все почтовые подмассивы. Я думаю, что вы должны вызвать некоторую функцию во внешнем foreach, но перед внутренним, чтобы очистить строки, которые уже были добавлены в $ xls.

Вот тестовый прогон, о котором я мог подумать:

  1. первый звонок на внешний foreach сделан - $ email = email1@fake.com
  2. выполняется первый вызов внутренней программы - вызывает $ xls-> addrow () для каждого из значений массива "email1@fake.com"
  3. вызывается первый вызов $ xls-> emailFile (), который открывает "email.xls" в режиме w + и записывает содержимое в файл
  4. сделан второй вызов на внешний foreach - $ email = email2@fake.com
  5. выполняется второй вызов внутренней программы - вызывает $ xls-> addrow () для каждого из значений массива "email2@fake.com". Примечание - Я думаю, что на данный момент строки, добавленные ранее к $ xls на шаге 2, все еще существуют, и это может быть проблемой. Если да, вам нужно выполнить очистку либо до запуска внутреннего foreach, либо в методе $ this-> buildXLS ()
  6. Вызывается второй вызов $ xls-> emailFile (), который открывает «email.xls» в режиме w + и записывает содержимое в файл, содержащий значения для обоих подмассивов.

Я не уверен, какова цель $ this-> buildXLS (), и проигнорировал это для моего объяснения выше.

Имеет ли смысл вышесказанное?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...