【问题标题】:Getting a CSV cell full value in PHP在 PHP 中获取 CSV 单元格的完整值
【发布时间】:2017-06-23 08:19:55
【问题描述】:

我正在使用 PHP 读取 CSV 文件,我获得了每一行的所有值,但某些具有长数据的列显示类似 9.21008E+15 我不知道如何获得完整的价值,这应该是9210080000000000

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 />";
}
}

【问题讨论】:

  • 不在 Excel 中打开?
  • PHP 没有做任何事情。已经像 E+15 一样存储在 CSV 中的值可能是您将其打开到 excel 中并且 excel 自动替换为 E+15 尝试将该列转换为 Excel 中的文本。
  • 该脚本中到底发生了什么废话? fgetcsv 将一行的列作为数组获取。从那里,您创建一个字符串,在其中用逗号分隔每个值 - 然后再次在逗号处爆炸......这不仅看起来相当多余,而且它可能会导致列值本身可能包含的错误列分隔符。
  • @CBroe 不会有任何逗号分隔符,所以它完全安全
  • 好的,那么这只是“安全”的废话。

标签: php csv import-csv


【解决方案1】:

向有此问题的单元格添加前缀解决了问题 (')

【讨论】:

    【解决方案2】:

    你只需要将它转换回整数值

    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 />";
        }
    }
    

    【讨论】:

    • 您是个天才,您的解决方案运行良好,无需担心添加前缀。谢谢
    • @PeterT 如果您对精度损失感到满意,这可能包括...
    • @CBroe 你是对的,那么我将不得不坚持我的回答
    • @CBroe 你能举个例子吗?
    • @Neodan 这实际上并不是对您的方法的批评 - 如果您已经从 CSV get 9.21008E+15,那么您所展示的是获得又是“全数”。问题是 Excel 可能已经丢弃了有效数字 - 无法再知道 9.21008E+15 是否最初 9210080000000000 - 或者更确切地说是9210080000000001 ...?因此,彼得作为答案发布的内容是,在 Excel 中的字段值中添加引号字符开始,是处理 情况的正确方法。
    猜你喜欢
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多