我正在处理导入模块,其中管理员可以从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:
}
?>
答案 0 :(得分:0)
通常在数字之前放入'登录单元格可以强制Excel将值用作文本。如果您可以操作原始xls或要求用户在保存到csv之前执行此操作,那么它将起作用(例如,有一个新列并放入B1 cell = CONCATENATE(“'”,A1)} 从csv + php“搞清楚”将无效(精度已经丢失)。