2011-08-18 7 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

fgets() 대신 stream_get_contents()을 사용하십시오. 후자는 단 한 줄만 가져 오기 때문에.

$export_data = stream_get_contents($outstream); 
+0

아, 알았습니다. 고맙습니다. 결코 그것에 대해 생각하지 않았습니다. –