2010-11-02 26 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