为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 导出CSV文件部分行错位

PHP 导出CSV文件部分行错位

PHP
jeck猫 2019-03-03 15:59:11
使用PHP fputcsv 或者 fwrite 方法导出大概1万7千条数据,出现大概6条到10条左右的数据错位情况。 代码: public static function createCsv($data, $header = [], $filename = '') { // 参数判断 $data = is_object($data) ? $data->toArray() : $data; $header = is_array($header) ? $header : []; $filename = (1 > strlen(trim($filename))) ? 'csv-' : trim($filename); if (empty($data)) { return false; } // 文件名/目录 $filename = $filename . date("YmdHis", time()) . rand(1000, 9999) . ".csv"; $dir = \Env::get('runtime_path') . '/export/'; if (!is_dir($dir) && !mkdir($dir)) { return false; } // 打开文件指针资源 $handle = fopen($dir . $filename, 'w+'); if (!$handle) { return false; } // 写入文件header头 if (!empty($header)) { $res = fputcsv($handle, $header); if (!$res) { return false; } } // 判断header是索引数组还是关联数组 $is_assoc = array_keys($header) !== range(0, count($header) - 1); // 写入文件内容 $frequency = 0; // 频率 $limit = 100000; foreach ($data as $datum) { $frequency++; if ($limit == $frequency) { // 刷新输出buffer ob_flush(); flush(); $frequency = 0; } // 如果是关联数组,则获取内容中和头部key相对应的值 if ($is_assoc) { $csv = ""; foreach(array_keys($header) as $item) { $val = str_replace('"', '""', "\t" . $datum[$item]); $csv .= '"' . $val . '",'; } $csv = substr($csv, 0, -1); $csv .= "\n"; $res = @fwrite($handle, $csv); } else { $res = fputcsv($handle, $datum); } if (!$res) { return false; } } // 关闭指针资源 fclose($handle); return \Url::build('erp/Common/export', 'file=' . $filename); } 出现的情况: 同样的数据筛选之后发现也只有这一条出现问题 源码: 发现该行的逗号分隔符去到双引号里了,请问出现这种问题的原因是什么。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 712 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信