【问题标题】:fputcsv only returning one row from arrayfputcsv 仅从数组返回一行
【发布时间】:2011-08-18 17:00:44
【问题描述】:

这一定很简单......按照here和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 格式),而没有其他数组。有什么建议么?谢谢

【问题讨论】:

  • 你为什么不直接使用$order_data
  • 怎么样?我对任何想法持开放态度......实际上需要组合来自多个查询的数据,然后导出到可下载的 csv。 (我从上面的示例中省略了这些标题。)

标签: php csv foreach fputcsv


【解决方案1】:

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

$export_data = stream_get_contents($outstream);

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2016-02-08
    • 1970-01-01
    相关资源
    最近更新 更多