fputcsv возвращает только одну строку из массива - PullRequest
3 голосов
/ 18 августа 2011

Это должно быть очень просто ... Следуя примерам здесь и на php.net, я пытаюсь получить записи из запроса MySQL, преобразовать их в формат CSV и назначить эти данные переменной для использования в программе. Я создал. Я хотел бы сделать это без создания временных файлов.

  public function export3() {
      $order_data = array();
      $order_data[] = array(
        'order_id',
        'email',
        'telephone',
        'shipping_address',
        'payment_address',
        'comment'
    );


    // Mysql returns data and is assigned to this array in the following format

    $order_data[] = array(
        '1',
        'blank@blank',
        '123456789',
        '123 Lane',
        '123 Lane',
        'no comment'
    );



    $order_data[] = array(
        '2',
        'blank3@blank3',
        '987654321',
        '321 Lane',
        '321 Lane',
        'no comment'
    );

    $outstream = fopen("php://temp", 'r+');

    foreach($order_data as $csv_data) {
        fputcsv($outstream, $csv_data);
    }

    rewind($outstream);
    $export_data = fgets($outstream);
    fclose($outstream);

    $response->output($export_data);

}

К сожалению, я иногда получаю жалобы на преобразование "массив в строку", но даже без каких-либо ошибок я получаю только первый массив (в формате csv), но не остальные. Какие-либо предложения? Спасибо

1 Ответ

4 голосов
/ 18 августа 2011

Используйте stream_get_contents() вместо fgets(), поскольку последний выбирает только одну строку.

$export_data = stream_get_contents($outstream);
...