网站地图    收藏   

主页 > php专栏 > php函数大全 >

解决php fgetcsv 读取csv文件数据不完整问题 - php函

来源:自学PHP网    时间:2014-11-25 00:27 作者: 阅读:

[导读] csv文件是在php中有fgetcsv函数来读取,但在linux是的php5 2 8版本中会发现fgetcsv读出来的csv文件数据不完整,在windows其它版本中,代码如下:...

解决php fgetcsv 读取csv文件数据不完整问题

csv文件是在php中有fgetcsv函数来读取,但在linux是的php5.2.8版本中会发现fgetcsv读出来的csv文件数据不完整,在windows其它版本中,代码如下:

  1. # Open the File.  
  2. if (($handle = fopen("test.csv""r")) !== FALSE) {  
  3.     # Set the parent multidimensional array key to 0.  
  4.     $nn = 0;  
  5.     while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {  
  6.          
  7. //print_r($data);  
  8.         # Count the total keys in the row.  
  9.         $c = count($data);  
  10.         # Populate the multidimensional array.  
  11.         for ($x=0;$x<$c;$x++)  
  12.         {  
  13.             $csvarray[$nn][$x] = $data[$x];  
  14.         }  
  15.         $nn++;  
  16.     }  
  17.     # Close the File.  
  18.     fclose($handle);  
  19. }  
  20. //print_r($csvarray); 

这个代码没有任何问题,然后我放到了linux中发现有为空的字段了,问题解析出来的数据不完整,有为空的字段,网上查了下说是在php5.2.8 中存在bug,解决办法是使用自定义函数,代码如下:

  1. function __fgetcsv(& $handle$length = null, $d = ','$e = '"') {  
  2.      $d = preg_quote($d);  
  3.      $e = preg_quote($e);  
  4.      $_line = "";  
  5.      $eof=false;  
  6.      while ($eof != true) {  
  7.          $_line .= (emptyempty ($length) ? fgets($handle) : fgets($handle$length));  
  8.          $itemcnt = preg_match_all('/' . $e . '/'$_line$dummy);  
  9.          if ($itemcnt % 2 == 0)  
  10.              $eof = true;  
  11.      }  
  12.      $_csv_line = preg_replace('/(?: |[ ])?$/'$d, trim($_line));  
  13.      $_csv_pattern = '/(' . $e . '[^' . $e . ']*(?:' . $e . $e . '[^' . $e . ']*)*' . $e . '|[^' . $d . ']*)' . $d . '/';  
  14.      preg_match_all($_csv_pattern$_csv_line$_csv_matches);  
  15.      $_csv_data = $_csv_matches[1];  
  16.      for ($_csv_i = 0; $_csv_i < count($_csv_data); $_csv_i++) {  
  17.          $_csv_data[$_csv_i] = preg_replace('/^' . $e . '(.*)' . $e . '$/s''$1' , $_csv_data[$_csv_i]);  
  18.          $_csv_data[$_csv_i] = str_replace($e . $e$e$_csv_data[$_csv_i]);  
  19.      }  
  20.      return emptyempty ($_line) ? false : $_csv_data;  

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论