2010-11-02 94 views
0

好的,所以有一个页面我在另一台服务器上查询,该服务器返回两个值的逗号分隔列表。东西它会返回将是:PHP - int数字字符串值的赋值0

850,640 

我有一些在该网页调用的file_get_contents和需要做基于两个值的一些数值计算的PHP代码。

无论我尝试什么,我都无法得到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倒是他们)之后和$x的空间被分配值0

我在这里做错了什么?

+0

您是否尝试过在自定义回调中修剪? – BoltClock 2010-11-02 01:25:35

+0

我用'$ res = trim(“850,640”);'试过了你的代码,它能正常工作。你确定你的网址_really_包含这些数字吗?还要注意,不是使用你自己的函数,你可以使用intval() – 2010-11-02 01:26:18

+0

查看源文件或以纯文本打印在这里非常有用。正如Hamish指出的那样,您可能会打印围绕空白的HTML,并且据我所见,您肯定是从浏览器的视口复制并粘贴,而不是HTML源。 – BoltClock 2010-11-02 01:31:40

回答

0

因为我在网址上使用file_get_contents(),所以有一些HTML被放入,以至于我没有注意到我的echo,因为它解析出了......只是空的body和html标记。哎呀!

+0

您不接受我的回答,甚至认为这有助于您找到原因? :( – Hamish 2012-10-19 02:01:42

1

请尝试以下操作。 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()。如果这不起作用,页面还会输出其他内容。

+0

仍然获得'$ x = 0' :( – ashgromnies 2010-11-02 01:29:10

+0

X 850,640 X X:0Y:640 – ashgromnies 2010-11-02 01:29:40

+0

但是,当我手动设置'$ res'为“850,640”就像你做的那样,它可以工作......这让我觉得在850之前还有其他一些非空白字符?有什么方法可以看到? – ashgromnies 2010-11-02 01:31:42

3

我在这里做错了什么?

就我所知,这表明$ res的内容与您的期望不符。你可以改变第一回声:

echo htmlentities($res); 

我的猜测是$资源包含了一些非打印字符,例如,它实际上是:

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

&nbsp;850,640&nbsp; 
+0

你是对的!它有html和body标签。哎呀。谢谢! – ashgromnies 2010-11-02 01:35:59

1

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

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

+1

-1不知道你听说PHP不是一种类型化的语言。它不是严格键入的,但[这并不意味着它完全没有明确的数据类型](http://www.php.net/manual/en/language.types.php)。 – BoltClock 2010-11-02 01:33:41

+0

基于你的澄清,我的downvote没有。 – BoltClock 2010-11-02 01:46:36

+0

@BoltClock - 谢谢队友! – zerodin 2010-11-02 01:48:06