PHP读取json数据

时间:2015-12-27 00:40:28

标签: php json api steam

我对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))似乎是一种做我想做的坏方法,也许有更好的方法?

2 个答案:

答案 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。