TTATPuOT
@TTATPuOT
https://code.patriotovsky.ru/

Как вывести нужное значения из спецефичного JSON массива через PHP?

Здравствуйте!
Есть JSON массив, который подгружается со стороннего ресурса:
{
	"playerstats": {
		"steamID": "76561197972495328",
		"gameName": "ValveTestApp260",
		"stats": [
			{
				"name": "total_kills",
				"value": 2199
			},
			{
				"name": "total_deaths",
				"value": 1501
			},
			{
				"name": "total_time_played",
				"value": 115235
			}
		]
	}
}

Получаю я из него значение вот так:
$json_csgo_user_info = file_get_contents('http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=730&key='.$steam_api_key.'&steamid='.$user_steam_id); //Получение JSON
$json_csgo_user_info = json_decode($json_csgo_user_info)->playerstats->stats;
echo $json_csgo_user_info[1]->value; //Вывод

Но, как мне кажется, это неправильно. Вдруг, последовательность параметров поменяется. Возможно ли сделать вывод значения "value" не в зависимости от последовательности, а в зависимости от параметра "name"?

Заранее спасибо!
  • Вопрос задан
  • 1601 просмотр
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Вы правы, так действительно лучше не делать.
Но удобного способа сделать это на php нет.
Вы можете:
  • Подключить библиотеку для работы с коллекциями (например пакет Collection из Laravel). На средних и крупных проектах я предпочитаю именно такой путь, чтобы не изобретать велосипед.
  • Использовать array_filter в комбинации с reset.
  • Обходить элементы массива циклом и прерывать его, когда найден нужный элемент.
Ответ написан
Комментировать
BoShurik
@BoShurik
Symfony developer
Дополню Алексей Уколов
Для PHP >= 5.5
array_column

$json = file_get_contents('http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=730&key='.$steam_api_key.'&steamid='.$user_steam_id); //Получение JSON
// true, чтобы на выходе был ассоциативный массив, а не \stdClass (для PHP 7 неактуально, т.к. array_column может работать с массивами объектов)
$data = json_decode($json, true);
$stats = array_column($data['playerstats']['stats'], 'value', 'name');
echo $stats['total_deaths'];
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы