【问题标题】:PHP XML - bad value returningPHP XML - 返回错误值
【发布时间】:2019-03-03 10:26:33
【问题描述】:

目前我正在从事一个电子商务项目。我有完整的 XML 产品,我需要在电子商店中实现这些产品。

问题是我的 XML 解析器返回了错误的值,例如:我有 float 32 000, 00,它只将 32 解析为我的 php 变量。我正在解析的数字以某种方式除以千,我不知道为什么。具有 32 000 个 XML 文件的完全相同的代码可以正常工作。它们是我在初始化 SimpleXML 对象时需要设置的任何转换设置吗?

感谢您的帮助。

【问题讨论】:

  • 这看起来像一个字符串,其中包含 32 000, 0032 一个 space 和一堆 0 值,当 PHP 将其转换为 INT 或 FLOAT 时变为 32。参见 @ 987654321@ $foo = 5 * "10 Little Piggies"; // $foo is integer (50)$foo = 5 * 10 在将 "10 Little Piggies" 转换为 INT 后。同样的规则在这里适用。你可以测试这个here
  • 好的,谢谢。但是,我也有像 32 290,00 这样的数字,但仍然是 32。
  • 看我的回答!这应该会照顾好它。

标签: php xml parsing xml-parsing


【解决方案1】:

让我们看看这个

我有 float 32 000, 00 并且它会解析

不,你有一串"32 000, 00"。所以如果我们看看 PHP 是如何进行类型杂耍的

http://php.net/manual/en/language.types.type-juggling.php

我们看到几个这样的例子:

$foo = 5 * "10 Little Piggies"; // $foo is integer (50)

所以这两个相乘的值是505*10,十是从"10 Little Piggies"解析出来的。 PHP 会将相同的规则应用于您上面的内容,从而产生32。因为它是一个带有 spaces 的字符串,所以 PHP 的执行方式几乎与上面完全相同。

您可以轻松地对此进行测试:

echo floatval('32 000, 00');

输出

32 

Sandbox

您可能必须手动将其转换为应有的值。一件简单的事情就是删除空格:

  echo floatval(str_replace([' ',','], ['','.'], '32 000, 00'));
  #output 32000
  echo floatval(str_replace([' ',','], ['','.'], '32 290,01'));
  #output 32290.01

如果我没记错的话,一些国家/地区使用, 作为小数分隔符的.。但是我必须用. 替换, 才能让它们工作......可能有一些边缘情况不起作用,但如果没有更大的数据样本,我不能肯定地说。

这些空间在哪里或为什么在那里,我不知道。最好将它们从 XML 中完全删除,但这可能是不可能的。

问题中没有一些实际代码,这是我能做的最好的事情。

干杯!

【讨论】:

  • 当然,很高兴我能帮上忙。
猜你喜欢
  • 2013-10-03
  • 1970-01-01
  • 2017-06-07
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
  • 2018-11-17
  • 1970-01-01
相关资源
最近更新 更多