Пытается разобрать JSON с PHP

Я новичок в php, и это действительно сильно меня озадачило – я пытаюсь разобрать этот json, чтобы получить значение match_id .

 { "result": { "status": 1, "num_results": 1, "total_results": 500, "results_remaining": 499, "matches": [ { "match_id": 649218382, "match_seq_num": 588750904, "start_time": 1399560988, "lobby_type": 0, "players": [ { "account_id": 4294967295, "player_slot": 0, "hero_id": 69 } ] } ] } } 

Пока у меня есть:

 $matchhistoryjson = file_get_contents($apimatchhistoryurl); $decodedmatchhistory = json_decode($matchhistoryjson, true); $matchid = $decodedmatchhistory->{'match_id'}; 

Но я уверен, что это совсем не так. Все, что мне нужно из этого файла JSON, – это идентификатор соответствия.

Вы получаете массив обратно из json_decode() когда вы передали второй параметр со значением true чтобы вы json_decode() к нему, как к любому многомерному массиву:

 $matchhistoryjson = file_get_contents($apimatchhistoryurl); $decodedmatchhistory = json_decode($matchhistoryjson, true); echo $decodedmatchhistory['result']['matches'][0]['match_id']; 

демонстрация

Естественно, если у вас есть несколько совпадений, вы хотите получить идентификатор соответствия, вы можете пройти через $decodedmatchhistory['result']['matches'] и получить их соответственно.

Это ваш код:

 $matchhistoryjson = file_get_contents($apimatchhistoryurl); $decodedmatchhistory = json_decode($matchhistoryjson, true); $matchid = $decodedmatchhistory->{'match_id'}; 

Два вопроса. Сначала, когда вы установите true в вызове json_decode() который возвращает результаты в виде массива:

 When TRUE, returned objects will be converted into associative arrays. 

Таким образом, вы получите доступ к данным в виде массива:

 $matchid = $decodedmatchhistory['match_id']; 

Но ваш оригинальный синтаксис неверен, даже если вы обращались к данным как к объекту:

 $matchid = $decodedmatchhistory->{'match_id'}; 

Если вы установите json_decode() в значение false или даже полностью вышли из этого параметра, вы можете сделать это вместо этого:

 $decodedmatchhistory = json_decode($matchhistoryjson); $matchid = $decodedmatchhistory->match_id; 

Поэтому попробуйте оба и посмотрите, что произойдет.