PHP 读取 json 数据

PHP reading json data

我是 PHP 的新手,all.I 的网络编程正在尝试从 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,值应该是英雄名字。

此外,我将 heroes 变量设置为 reset(reset($data)) 的地方似乎是做我想做的事情的糟糕方法,也许有更好的方法?

您可以使用 array_map() 函数将 id 和 names 提取到两个单独的数组中,然后使用 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);

一个更简单更明显的解决方案是简单地遍历它。从你的 pastebin 中,我看到你的数据被包裹在两级数组中,所以 ...

$myResult = [];
foreach ($data['result']['heroes'] as $nameId) {
    $myResult[$nameId['id']] = $nameId['name'];
}

(无需执行任何 reset 调用;这是获取数组第一个元素的奇怪方法)

请注意,要使其生效,您必须应用@RamRaider 提供的技巧

$data = json_decode($JSON, true);

为了 json_decode 到 return 数组,而不是 StdClass。