2016-11-08 215 views
0

我有一个代码,它会创建我的表的.csv导出。这里是我的代码:如何将列名称设置为.csv文件列的名称?

public function export(Request $request){ 

    header('Content-Type: application/excel'); 
    header('Content-Disposition: attachment; filename="export.csv"'); 

    $tb_name_alias = $request->tb_name; 
    $convert_alias_to_table_name = array('person' => "App\\persons"); 
    $tb_name = $convert_alias_to_table_name[$tb_name_alias]; 
    $arr = $tb_name::all()->toArray(); 

    $newarr = array(); 
    $size_of_outer_array = sizeof($arr); 

    For ($i = 0; $i < $size_of_outer_array; $i++) { 
     $newarr[] = implode(",",$arr[$i]); 
    } 

    $fp = fopen('php://output', 'w'); 
    foreach ($newarr as $line) { 
     $val = explode(",", $line); 
     fputcsv($fp, $val); 
    } 
    fclose($fp); 
} 

它的工作原理为好,但是当我再次导入它,它看起来像这样:

enter image description here

正如你看到的,列名是不是真实的。他们是col1col2等。但我需要设置一些名称作为列名。像id,name等。

我该怎么做?

+0

请参考下面适合您的答案http://stackoverflow.com/questions/11810599/in-php-to-dynamically-get-table-name-and-fields-链接from-csv-file-and-import-to-mysq –

+0

你可以显示一行数据到$ newarr。的print_r($ newarr); – user3099298

+0

@ user3099298这里是数组:'$ newarr = array('1,John,22','2,Jack,30','3,Peter,14');' – stack

回答

1

试试这个

$fp = fopen('php://output', 'w'); 
fputcsv($fp, array('Column 1', 'Column 2', 'Column 3')); 


foreach ($newarr as $line) { 
     $val = explode(",", $line); 
     fputcsv($fp, $val); 
    } 
    fclose($fp); 
+0

那么你的方法没有设置任何名称对于列......它只是创建一个行作为第一个。我不想那样 – stack