2015-12-27 2 views
0

Я новичок в PHP и веб-программировании на всех. Я пытаюсь прочитать некоторые данные json из API паролей.PHP чтение json data

данных: 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 

Я имею в виду, ключи массива должны быть идентификаторами и значение должно быть именами героя.

Кроме того, место, где я устанавливал переменную героев для сброса (reset($data)), кажется неправильным способом делать то, что я хочу, может быть, есть лучшие способы?

+0

Возможный дубликат [json \ _decode to array] (http://stackoverflow.com/questions/5164404/json-decode-to-array) –

+1

json_decode ($ data) создаст объект (stdClass), тогда как json_decde ($ data, true) создаст массив. – RamRaider

ответ

2

Проще более очевидное решение состоит в том, чтобы просто петли через него. Из вашего Pastebin, я вижу, что ваши данные завернуты в двух уровнях массива так ...

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

(Нет необходимости делать какие-либо reset вызовов, это странно способ, чтобы получить первый элемент массива)

Обратите внимание, чтобы это работало, необходимо применять наконечник по @RamRaider

$data = json_decode($JSON, true); 

для того, чтобы json_decode возвращать массивы, не StdClass.

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);