use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Spreadsheet;
控制器:
public function index() { $head = ['name'=>'名字','score'=>'得分']; $data = [ ['name' => '张三', 'score' => '80'], ['name' => '李四', 'score' => '90'], ['name' => '王五', 'score' => '60'], ]; return TestLogic::export($head,$data,'测试.csv'); }
逻辑层:
public static function export(array $head,array $body,string $file_name) { $head_keys = array_keys($head); $head_values = array_values($head); $fileData = self::utfToGbk(implode(',',$head_values)) . "\n"; if(strpos($file_name,'.') === false){ $file_name .= '.csv'; } foreach ($body as $value) { $temp_arr = []; foreach($head_keys as $key){ $temp_arr[] = $value[$key] ?? ''; } $fileData .= self::utfToGbk(implode(',',$temp_arr)) . "\n"; } $response = new Response(); $content_type = 'text/csv'; return $response->withHeader('content-description', 'File Transfer') ->withHeader('content-type', $content_type) ->withHeader('content-disposition', "attachment; filename={$file_name}") ->withHeader('content-transfer-encoding', 'binary') ->withHeader('pragma', 'public') ->withBody(new SwooleStream($fileData)); } /** * 字符转换(utf-8 => GBK) * @param $data * @return false|string */ public static function utfToGbk($data) { return mb_convert_encoding($data,"GBK","UTF-8"); }