2016-08-01 88 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