【发布时间】:2014-07-28 08:20:17
【问题描述】:
我正在开发一个导入模块,管理员可以在该模块中从 CSV 文件中导入多行客户信息(包括客户的 ID 号,它是一个 13 位数字值)。
问题似乎是,如果值为 8888881111088,Excel 会将数字转换为 8.88888E+12,我需要验证该数字(即使它是一个字符串)以匹配回数据库中的先前条目)。
不幸的是,我不能依赖管理员将 Excel 中的这些条目转换为字符串,因此我正在寻找一种方法在 PHP 中将不正确的值转换为 13 位数字/字符串。
任何建议将不胜感激!
这是我正在使用的脚本示例:
<?php
// $data contains the rows returned from the CSV file:
foreach ($data AS $k => $v) {
/* $v['id_number'] is 8.88888E+12 but in the database it's stored correctly
* as 888888111088. I need to match the imported value from the CSV to the row
* in the database.
*
* I need to convert 8.88888E+12 back to 888888111088.
*/
if (strlen(str_replace(" ", "", $v['id_number'])) != 13) {
$this->importValidateRules[$k] = "The ID number (" . $v['id_number'] . ") is invalid. It must be 13 characters long.";
}
// Continue with model validation:
}
?>
【问题讨论】:
-
如果被错误的保存为csv是不能做的。在记事本中打开它,看看它在平面文件中是如何表示的。如果它是 xls 或 xlsx 文件,您可以获得原始值。但没有一次错误地保存在 csv 中。
-
@RobbieChiha 谢谢你的反馈,我想了很多:(
-
在 Excel 中使用字段类型,然后尝试重新导出为 CSV。也可以尝试使用
PHPExcel,效果很好。 -
@MauritzSwanepoel 如果你想了解它的数学: 8.88888E+12 = 8.88888*10^12 = 8888880000000 这不会转换回完整的数字。唯一的方法是在保存之前将其作为 excel 中的文本字段。
-
感谢您的反馈。感谢 Excel,我已经正式失去了 5 个小时的生命,哈哈。不幸的是,我必须在代码中进行验证,因为我不能依赖客户端在之前操作数据。我将在这里查看phpExcel作为答案!