2017-06-23 42 views
-2

我正在用PHP读取一个CSV文件,我得到了每一行的所有值,但是一些有长数据的列显示类似这样的东西9.21008E+15 我不知道如何获得完整的值这是假设是这个9210080000000000在PHP中获取一个CSV单元格的完整值

if (($handle = fopen("Test.csv", "r")) !== FALSE) { 
while (($data = fgetcsv($handle, 0, ",")) !== FALSE) { 
    $num = count($data); 
    $tb_row = ""; 
    for ($c=0; $c < $num; $c++) { 
     $tb_row .= $data[$c].","; 
    } 
    $new_row = substr($tb_row, 0, -1);//removing the comma at the end of line... 
    //explode and assign values then insert 
    $each_col = explode(',', $new_row); 
    $Device_state = $each_col[0]; 
    $udid = $each_col[8]; 
    $imsi = $each_col[9]; 
    $imei = $each_col[10]; 
    echo "$imsi || $imei"."<br />"; 
} 
} 
+0

不要在Excel中打开? – CD001

+0

PHP没有做任何事情。已经以CSV格式存储为E + 15的值可能会将其打开为excel,并且Excel会自动替换为E + 15尝试将该列转换为Excel中的文本。 –

+0

无论如何,剧本会发生什么样的废话? fgetcsv以数组的形式获取一行的列。从那里,你创建一个字符串,在这里你用逗号分隔每个值 - 然后再用逗号分解它......不仅看起来相当多余,而且它可能会产生可能包含列值的错误列分隔符字符。 – CBroe

回答

0

添加一个前缀有这个问题解决了问题(')

0

你只需要将其转换回整数值的细胞

if (($handle = fopen("Test.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) { 
     $num = count($data); 
     $tb_row = ""; 
     for ($c=0; $c < $num; $c++) { 
      if (strpos($data[$c], 'E+')) 
       $data[$c] = intval((float)$data[$c]); 

      $tb_row .= $data[$c].","; 
     } 
     $new_row = substr($tb_row, 0, -1);//removing the comma at the end of line... 
     //explode and assign values then insert 
     $each_col = explode(',', $new_row); 
     $Device_state = $each_col[0]; 
     $udid = $each_col[8]; 
     $imsi = $each_col[9]; 
     $imei = $each_col[10]; 
     echo "$imsi || $imei"."<br />"; 
    } 
} 
+0

你是一个天才,你的解决方案运作良好,无需担心添加前缀。谢谢 – PeterT

+0

@PeterT如果你没有精准度的损失,这可能包括... – CBroe

+0

@CBroe你是对的,那么我将不得不坚持我的回答 – PeterT