2017-06-23 64 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