我的脚本读取txt文件,然后将值写入数据库表。有一个有价格的字段,在txt文件中,4位数值的价格在第一个数字后有2个空格(前2 500个)。我把这个函数(str_replace运行良好并替换','但当我用它来删除空格时它不会这样做,最后我把preg_replace但它也跳过空格):
$model->price = preg_replace('/\s+/','',str_replace(',', '.', $row_data[3]));
我表中价格字段的数据类型是varchar,当我使用int或decimal时,它会跳过空格后的数字(2 070变为2,12 015 => 12)。我必须在集成阶段删除这个空间,因为当我使用价格字段进行操作时,php会跳过空格后的数字,而我的进一步操作会出错。
男人们有什么问题?
UPD 来自@jeroen的解决方案效果很好,我将价格字段更改为十进制(10,2)并将此行用于解析字符串的价格:
$model->price = filter_var(str_replace(',', '.', $row_data[3]), FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
答案 0 :(得分:2)
我不会使用正则表达式而是使用filter:
// replace if necessary
$number = str_replace(',', '.', $row_data[3]);
// filter unwanted characters
$model->price = filter_var($number, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
您应该确保更新数据库中的所有价格,以便可以切换到数据库本身的数值。
答案 1 :(得分:0)
为什么不在空格上使用str_replace
?比正则表达式更容易
str_replace(array(',', ' '), array('.', ''), $row_data[3]);