Csv.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace app\common\library;
  3. Class Csv
  4. {
  5. public static function createCsv($head = array(), $data = array(), $filename = null, $with_head = true)
  6. {
  7. if (empty($filename)) {
  8. $filename = date('Y-m-d') . '.csv';
  9. } else {
  10. $filename = $filename . '.csv';
  11. }
  12. header("Content-Type: application/csv");
  13. header('Content-Disposition: attachment;filename="' . $filename . '"');
  14. header('Cache-Control: max-age=0');
  15. $head = eval('return ' . iconv('utf-8', 'GBK', var_export($head, true)) . ';');
  16. foreach ($data as &$v) {
  17. foreach ($v as &$vv) {
  18. $vv = iconv('utf-8', 'GBK', $vv);
  19. }
  20. }
  21. $fp = fopen('php://output', 'w');
  22. if ($with_head) foreach ($head as $line) {
  23. if (is_array($line)) {
  24. fputcsv($fp, $line);
  25. } else {
  26. fputcsv($fp, $head);
  27. break;
  28. }
  29. }
  30. $head = array_keys($head);
  31. $i = 0;
  32. foreach ($data as $k => $line) {
  33. $new_line = [];
  34. foreach ($head as $col) {
  35. $new_line[] = $line[ $col ];
  36. }
  37. fputcsv($fp, $new_line);
  38. unset($data[ $k ]);
  39. $i++;
  40. if ($i > 100) {
  41. ob_flush();
  42. flush();
  43. $i = 0;
  44. }
  45. }
  46. // if (empty($data)) {
  47. // fputcsv($fp, [iconv('utf-8', 'GBK', '无数据')]);
  48. // }
  49. fclose($fp);
  50. }
  51. }