2015-04-15 26 views
1

我有一個數組數組,我試圖插入數組到一個csv文件。php - fputcsv,新行不插入行末

這是我的代碼

$file = 'a.csv'; //path to the file on disk 


$fp = fopen($file, 'w') or die('Cannot open file: '.$file); 
foreach ($column as $fields) { 
    print ($fields); 
    fputcsv($fp, $fields); 
} 

fclose($fp); 

數據是這樣的

$column = (
     (1,2,3), (a,b,c) 
) 

我要像這樣

1,2,3,a,b,c 

1,2,3 
a,b,c 

但我正在逐漸輸出輸出

+0

你的查詢到底是什麼?未在輸出csv文件或瀏覽器中插入新行? – bSaraogi

+0

新行沒有插入csv文件 – user2728024

+0

難道是有一個「\ n」作爲換行符,而你的編輯器只是不明白(像notepad.exe)? – Siguza

回答

-2

我想你簡化缺少添加一個新行:

print($fielsd."\n") // if the aoutput is console 
print($fields."<br/>") // in case of html output 
+0

OP表示文件*中沒有新行*。 – Siguza

+0

文件中沒有新行,但如果您想要在新行上打印每行,則需要通過自己添加。 –

+0

是的,我不討論這個問題。但仍然沒有回答這個問題。 – Siguza

0

由於fputscsv由一個新行分隔

fputcsv()格式的線路(作爲fields數組傳遞)爲CSV並將它(以換行符結尾)寫入指定的文件句柄。

你的數據輸入將要被改變以匹配格式需要

$column = (
    (1,2,3) , (a,b,c) 
) 

修改或操縱的代碼來獲取所需的格式。

$column = array (
    array('1', '2', '3', '4'), 
    array('a', 'b', 'c') 

); 

有太多的方法可以爲我做這與具有啓動文件a.csv輸出的實際出演示,但我會猜測,爆炸()將做的工作很好。這將fputscsv的工作所需的數組列表放置在數組中。

$columns[] = explode("),("); 

這是一個使用數據庫輸出的例子。

$result = $connect->prepare("SELECT type_id, label, type, description FROM content_types WHERE type_id='". $args[0] ."'"); 
     $result->execute(); 
     $data = $result->fetchALL(PDO::FETCH_ASSOC); 

$columns[] = $data; 

也檢查出原帖,並回答爲similar question

+0

格式改變。還是一樣。我正在使用數組數組 – user2728024

+0

我正在讀取數據庫中的數據並將結果轉換爲數組數組。然後我試圖將數據寫入文件 – user2728024

+0

需要從數據庫獲取結果代碼或將實際數組設置爲文件。數據庫結果可以在數組或對象中。這個輸出應該放在容器數組中。它不會自動發生。你需要操縱結果來適應。 –

0

應該可以正常工作。有一個代碼負責編碼。

$filename = ''; // $filename = 'something.csv'; 
$chosen = array(); 
    /* $chosen = array (
    * array('ąąąą', 'źźźź', 'ęeęę', 'óóó'), 
    * array('łłłłł','żżżż', '1111', '22222') 
);*/ 

$file = fopen($filename, 'w'); 

foreach ($chosen as $row) { 
    fputs($file, $bom =(chr(0xEF) . chr(0xBB) . chr(0xBF))); 
    fputcsv($file, $row); 
} 

fclose($file); 

輸出

ąąąą,źźźź,ęeęę,óóó 
łłłłł,żżżż,1111,2222 
+0

文件未創建 – user2728024

+0

它必須。考慮到filename變量是空的以及數組。取消註釋或將您的數據放入當前的數據。 – Nubzor

+0

是的,我做到了。我給了文件名,並提供了數據如同 – user2728024

0

你可以嘗試添加最後一個字段的 「PHP_EOL」 結束。

0

我最近試圖找出如何使用fputcsv獲得新的一行,並遇到這篇文章。我通過使用fwrite添加新行來解決它。

$aKeys = array_keys($aDataKeys); 
    $rTmpFile = fopen('php://temp', 'rw'); 
    fputcsv($rTmpFile, $aKeys); 
    foreach ($aData as $aRow) { 
     fwrite($rTmpFile,"\r\n"); //<------Add a new line 
     fputcsv($rTmpFile, $aRow); 
    } 
    rewind($rTmpFile); 
    $sCsv = stream_get_contents($rTmpFile); 
    fclose($rTmpFile);