我对PHP和网络编程都很陌生。我正在尝试从steam API读取一些json数据。
数据:http://pastebin.com/hVWyLrfZ
我设法找到单个对象(我相信?)。
这是我的代码:
<?php
$url = 'https://api.steampowered.com/IEconDOTA2_570/GetHeroes/v0001/?key=X';
$JSON = file_get_contents($url);
$data = json_decode($JSON);
$heroes = reset(reset($data));
//var_dump($heroes);
$wat = reset($heroes);
$antimage = array_values($heroes)[0];
var_dump($antimage);
?>
我希望数据如下所示:
id => name
我的意思是,数组键应该是id,值应该是英雄名称。
另外,我将英雄变量设置为重置(reset($data)
)似乎是一种做我想做的坏方法,也许有更好的方法?
答案 0 :(得分:3)
您可以使用array_map()
函数在两个单独的数组中提取id和名称,然后使用array_combine()
从先前提取的数组中创建键值对数组。
$url = 'https://api.steampowered.com/IEconDOTA2_570/GetHeroes/v0001/?key=X';
$JSON = file_get_contents($url);
$data = json_decode($JSON, true);
$ids = array_map(function($a) {
return $a['id'];
}, $data['result']['heroes']);
$names = array_map(function($a) {
return $a['name'];
}, $data['result']['heroes']);
$heroes = array_combine($ids, $names);
print_r($heroes);
答案 1 :(得分:2)
一个更简单明了的解决方案是简单地循环它。从您的pastebin,我看到您的数据包含在两个级别的数组中,所以......
$myResult = [];
foreach ($data['result']['heroes'] as $nameId) {
$myResult[$nameId['id']] = $nameId['name'];
}
(无需进行任何reset
次调用;这是获取数组第一个元素的奇怪方法)
请注意,为此,您必须通过@RamRaider
应用提示$data = json_decode($JSON, true);
以便json_decode
返回数组,而不是StdClass。