2012-08-16 72 views
-1

我有一點麻煩在這裏...抓住無名(?)的JSON數據與PHP

我試圖從一個JSON文件here,抓住一些值,它可以被格式化here

JSON文件看起來是這樣的:

{ 
"type": "success", 
"message": "OK", 
"data": { 
"mainWeaponStats": [ 
{ 
"category": "Machine guns", 
"timeEquipped": 3507, 
"startedWith": null, 
"code": "mgRPK", 
"headshots": 18, 
"name": "RPK", 
"kills": 100, 
"deaths": null, 
}, 
{ 
"category": "Handheld weapons", 
"timeEquipped": 5452, 
"startedWith": null, 
"code": "wahUGL", 
"headshots": 1, 
"name": "Underslung Launcher", 
"kills": 108, 
"deaths": null, 
}, 
{ 
"category": "Sniper rifles", 
"timeEquipped": 307, 
"startedWith": null, 
"code": "srMK11", 
"headshots": 0, 
"name": "MK11", 
"kills": 2, 
"deaths": null, 
}, 

等。

我想抓住這些物品之一的殺戮。含義我想給一個像「Underslung Launcher」這樣的參數,並返回108. 在這種情況下,「Underslung Launcher」。 我正在尋找這樣的代碼:

$gamemode = $decode['data']['topStats']['mapMode']; 

但是,如果有人知道一個更好的辦法,請告訴我。 由於列表中的項目沒有「名稱」,不像「數據」&「mainWeaponStats」,我無法真正弄清楚如何做到這一點。

編輯: 這是相關代碼至今:

$weaponstats = "http://battlelog.battlefield.com/bf3/weaponsPopulateStats/" . $bf3id . "/1/"; 
$content = file_get_contents($weaponstats); 
$decode = json_decode($content, true); 

$mainweaponstats = $decode['data']['mainWeaponStats']; 

正如你所看到的,我有一個很難學習JSON。 我正試圖讀取它,但截至目前,我無法弄清楚這一點。

我真的不知道我會如何去做,因爲我試圖找到的值是在同一組中。

+2

如果我理解正確的,你想給像懸掛式啓動參數,返回108? – alpera 2012-08-16 13:54:31

+0

是的,這就是我想要做的。 – 2012-08-16 13:56:13

+4

'mainWeaponStats'是一個數組。循環,並檢查每一個,看它的名字是否匹配,然後返回殺死。 – 2012-08-16 13:56:51

回答

2
$mainweaponstats = $decode['data']['mainWeaponStats']; 

這是對象數組(數組良好,因爲你傳遞,truejson_decode)。只需循環瀏覽,找到你想要的。

$search = 'Underslung Launcher'; 
$kills = 0; 
foreach($mainweaponstats as $w){ 
    if($w['name'] === $search){ 
     $kills = $w['kills']; 
     break; 
    } 
} 
echo $kills; 
+0

它的工作原理!非常感謝你!我現在可以繼續我的項目,謝謝! – 2012-08-16 14:19:19

+0

不客氣! :) – 2012-08-16 14:44:51

2
<? 

$name = "Underslung Launcher"; 

$json = file_get_contents("json.php"); 
$dec = array(); 
$dec = json_decode($json,true); 

$datas = $dec['data']['mainWeaponStats']; 

foreach($datas as $data) 
{ 
    if($data['name']==$name) { 
     echo $data['kills']; 
     break; 
    } 
} 
?>