【问题标题】:PHP -- int typecast of numeric string value giving 0PHP - 数字字符串值的 int 类型转换,给出 0
【发布时间】:2011-05-03 17:22:48
【问题描述】:

好的,所以我正在另一台服务器上查询一个页面,该页面返回一个逗号分隔的两个值列表。它会返回的东西是:

850,640

我有一些 PHP 代码在该页面上调用 file_get_contents,需要根据这两个值进行一些数值计算。

无论我尝试什么,我似乎都无法从中获得 int 值。

$res = trim(file_get_contents('http://thatURL/'));
echo "X" . $res . "X<br/>";
list($x,$y) = array_map(create_function('$a', 'return (int)$a;'), explode(',', $res));

echo "X:$x";

输出结果:

X 850,640 X
X:0

注意逗号分隔值前后的空格(到底是怎么回事?我trim'd 他们!)并且$x 被分配了值0

我在这里做错了什么?

【问题讨论】:

  • 您是否尝试过在自定义回调中进行修剪?
  • 我用$res = trim(" 850,640 "); 试过你的代码,它工作正常。您确定您的网址真的包含这些数字吗?另请注意,您可以使用 intval() 而不是使用自己的函数
  • 查看源代码或以纯文本形式打印将非常有用。正如 Hamish 指出的那样,您可能正在打印围绕空白的 HTML,据我所知,您肯定是从浏览器的视口而不是 HTML 源复制和粘贴。

标签: php int casting


【解决方案1】:

我在这里做错了什么?

没有,据我所知,这表明 $res 的内容并不完全符合您的预期。你能把第一个回声改成:

echo htmlentities($res);

我的猜测是 $res 包含一些未打印的字符,例如,它实际上是:

<span> </span>850,640<span> </span>

&nbsp;850,640&nbsp;

【讨论】:

  • 你是对的!它有 html 和 body 标签。哎呀。谢谢!
【解决方案2】:

试试下面的。 array_map 和 llamda 函数对于您的使用来说无疑是多余的。

$res = " 850,640 ";
echo "X" . $res . "X<br/>";
list($x,$y) = explode(',', trim($res));

echo "X:" . (int)$x;
echo "Y:" . (int)$y;

为我工作,但我没有使用file_get_contents()。如果这不起作用,则页面正在输出其他内容。

【讨论】:

  • 但是当我像你一样手动将$res 设置为“850,640”时,它起作用了……这让我觉得850 之前还有其他一些非空白字符?有什么办法可以看吗?
  • 从该页面返回了其他内容。通过htmlspecialchars() 运行它,看看它会吐出什么。
【解决方案3】:

PHP 不是类型化语言。使用intval 将字符串转换为整数。

更正:它是一种松散类型的语言!我就是这个意思!

【讨论】:

【解决方案4】:

由于我在 URL 上使用了file_get_contents(),因此我在echo 中也没有注意到一些 HTML,因为它被解析了......只是空的 body 和 html 标签。糟糕!

【讨论】:

  • 您不接受我的回答,甚至认为这可以帮助您找到原因? :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
  • 2011-07-16
  • 2017-09-11
相关资源
最近更新 更多