2016-08-01 123 views
-1

我想創建一個新的.csv文件(不需要通過fopen先打開原始文件)。 到目前爲止,我已經試過這樣:使用PHP創建CSV文件

$list[] = array 
(
    "Name" => "John" 
    "Gender" => "M", 
    "Age" => "21", 
); 
    $timestamp0  = date("Y-m-d H:i:sa",time()); 
    $datetime  = new DateTime($timestamp0); 
    $datetime->setTimezone(new DateTimeZone('Asia/Jakarta')); 
    $timestamp  = $datetime->format("Y-m-d_H-i"); 

    $filename = __DIR__ . "/file/" . $timestamp . ".csv"; 

    $header = array ("name","gender","age"); 
    file_put_contents($filename, implode ("\n", $list)); // error here bcs array given :') 

我的問題是:

  1. 我怎樣才能改變陣列2D到csv?

非常需要你的幫助:(謝謝你這麼多:「)

回答

2

使用fopenw將創建文件,如果不存在:

$list = [ 
    ["Name" => "John", "Gender" => "M"], 
    ["Name" => "Doe", "Gender" => "M"], 
    ["Name" => "Sara", "Gender" => "F"] 
]; 

$fp = fopen($filename, 'w'); 
//Write the header 
fputcsv($fp, array_keys($list[0])); 
//Write fields 
foreach ($list as $fields) { 
    fputcsv($fp, $fields); 
} 
fclose($fp); 

如果你不這樣做如fputcsvfopen您可以使用此替代方法:

$list = [ 
    ["Name" => "John", "Gender" => "M"], 
    ["Name" => "Doe", "Gender" => "M"], 
    ["Name" => "Sara", "Gender" => "F"] 
]; 

$csvArray = ["header" => implode (",", array_keys($list[0]))] + array_map(function($item) { 
    return implode (",", $item); 
}, $list); 

file_put_contents($filename, implode ("\n", $csvArray)); 

我希望這會幫助你。

+0

林抱歉忘記改變,林使用數組多維,我該怎麼辦? :') – barney

+0

只需更新與您的陣列的問題,我會幫你在一個更好的選擇;) –

+0

OMG,非常感謝你:''')有美好的一天! – barney

0

您可以使用下面的代碼

$list[]=array ("name","gender","age"); // push header here 
$list[] = array("John","M","21"); // push record here 

$timestamp0  = date("Y-m-d H:i:sa",time()); 
$datetime  = new DateTime($timestamp0); 
$datetime->setTimezone(new DateTimeZone('Asia/Jakarta')); 
$timestamp  = $datetime->format("Y-m-d_H-i"); 

$filename = __DIR__ . "/file/" . $timestamp . ".csv"; 

$fp = fopen($filename, 'w'); 
foreach ($list as $fields) { 
    fputcsv($fp, $fields); 
} 
fclose($fp); 

有關CSV文件詳細閱讀PHP手冊。 http://php.net/manual/en/function.fputcsv.php