2015-01-04 57 views
-3

我有這樣的代碼:

<?php 
$names = json_decode(file_get_contents("http://country.io/names.json"), true); 
$data = file_get_contents("http://ipinfo.io/myIp/country"); 
echo($names[$data]); 
?> 

$names是國家代碼陣列,$data是從IP國家代碼,在我的情況:IE瀏覽器。我試圖輸出完整的國家名稱,但由於某種原因,它不起作用。但是,如果我輸入:echo($names['IE']);它工作正常。怎麼了?

+0

'$ data'是不是你的想法它是。 '的var_dump($數據)'。 –

+0

您是否迴應了兩個值以確保設置了正確的值? $名稱應該是一個assoc數組,它具有$ data的關鍵字。確保$ data是$ names中的有效鍵。 –

+0

第一個鏈接工作正常。我想測試第二個。爲此鏈接提供有效數據,以便我們可以看到返回的內容:http://ipinfo.io/myIp/country –

回答

3

我覺得$data包含空的字符。 trim將取消對您的字符串兩側的任何空字符,此代碼的工作:

<?php 
$names = json_decode(file_get_contents("http://country.io/names.json"), true); 
$data = trim(file_get_contents("http://ipinfo.io/MyIP/country")); 
echo($names[$data]); 
?> 

而且使用JSON作爲@ElefantPhace建議是更好

<?php 
$names = json_decode(file_get_contents("http://country.io/names.json"), true); 
$data = json_decode(file_get_contents("http://ipinfo.io/MyIP/json")); 
echo($names[$data->country]); 
?> 
+0

這工作完美,所以它只是接收3個字符,而不是所需的2? (2個字符和1個空的空間),所以它找不到該索引? – arleitiss

+1

沒問題:)另外我用json的方式更新了我的答案來解決它,這是一個更好的方法;) – Richard87

+1

嗨,是的,這就是問題:)另外,請接受我的答案,如果你滿意的話:) – Richard87

1

嘗試這種方式,我很好地工作:

$names = json_decode(file_get_contents("http://country.io/names.json"), true); 
$data = json_decode(file_get_contents("http://ipinfo.io")); 
echo($names[$data->country]); 

此外,您可能需要參考http://ipinfo.io/developers,看看爲什麼你可能不會得到你所期望的

+0

輸出ipinfo託管服務器的國家我想,因爲它給了我美國,即使我來自愛爾蘭。 – arleitiss

+1

不,它不。除非ipinfo.io在我工作的隔壁,否則不會。它不是。 'var_dump($ data)'並且看看你得到了什麼。如果你還不滿意,可以把'/ json'加到ipinfo url的末尾。並閱讀開發者頁面上的文檔。它清楚地告訴你,只是使用ipinfo.ip返回您的地址 – ElefantPhace

+1

它,IPinfo使用您的IP地址,除非另有規定,看看我的答案:)我希望OP要*他*用戶的位置,而不是他的服務器:) – Richard87