2011-08-18 101 views
3

这一定非常简单...以下是关于这里和php.net的示例,我试图从mysql查询中获取记录,将它们转换为csv格式,并将此数据分配给一个用于我创建的程序的变量。我想在不创建临时文件的情况下完成此操作。fputcsv只返回数组中的一行

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', 
     '[email protected]', 
     '123456789', 
     '123 Lane', 
     '123 Lane', 
     'no comment' 
    ); 



    $order_data[] = array(
     '2', 
     '[email protected]', 
     '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格式),而不是其他。有什么建议么?谢谢

+0

为什么你不使用'$ order_data'? – cwallenpoole

+0

怎么样?我愿意接受任何想法......实际上,来自多个查询的数据需要合并,然后导出为可下载的csv。 (我从上面的例子中删除了这些头文件。) –

回答

4

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

$export_data = stream_get_contents($outstream); 
+0

啊,好的。非常感谢你......从来没有想过这件事。 –