fputcsv只从数组返回一行

时间:2011-08-18 17:00:44

标签: php csv foreach fputcsv

这一定非常简单......按照这里的例子和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 个答案:

答案 0 :(得分:4)

使用stream_get_contents()代替fgets(),因为后者只提取一行。

$export_data = stream_get_contents($outstream);