2015-06-17 3 views
0

Использование этого JSON в качестве примера: http://steamcommunity.com/id/berthiest/inventory/json/730/2/ Я пытаюсь получить определенный элемент, который находится в массиве, в массиве массивов. Он также имеет то же имя, что и другие элементы в этих массивах. Это код PHP, который я использую сейчас.Получение элемента из массива массивов в JSON

$data = file_get_contents('http://steamcommunity.com/id/berthiest/inventory/json/730/2/'); 

$json = json_decode($data); 

foreach ($json->rgDescriptions as $mydata) 
{ 
    foreach($mydata->tags as $tag) { 
     echo $tag->name; 
    } 
} 

Как вы можете видеть, я в поиске через массивы в "tags" для "name" элемента. Если вы посмотрите на JSON и протестируете этот код, вы заметите, что в массивах "tags" есть множество элементов "name". Единственный "name" элемент Я хочу, чтобы это один в массиве, который также содержит "category_name":"Quality"

Я не могу выбрать номер массива, чтобы получить "name" из примерно так:.

foreach ($json->rgDescriptions as $mydata) 
{ 
    echo $mydata->tags[3]->name; 
} 

Потому что есть различное количество массивов в "tags" по всему JSON

Пример "tags":.

"tags":[{"internal_name":"CSGO_Tool_WeaponCase_KeyTag","name":"Key","category":"Type","category_name":"Type"},{"internal_name":"normal","name":"Normal","category":"Quality","category_name":"Category"},{"internal_name":"Rarity_Common","name":"Base Grade","category":"Rarity","color":"b0c3d9","category_name":"Quality"}] 

Мне нужен элемент "name":"Base Grade" из последнего массива, потому что он содержит "category_name":"Quality".

Так как я могу это сделать?

+0

Что именно это связано с JavaScript? Пожалуйста, укажите минимальный пример данных в сообщении. В любом случае, похоже, решение будет состоять в том, чтобы просто перебрать все «теги» и проверить, есть ли у любого из них «category_name»: «Качество» и только его использование. –

+4

вы декодировали json, поэтому он больше не json. это просто обычная старая структура данных PHP, просто потому, что она исходила из строки json, не делает ее волшебно другой. –

ответ

4

Вы можете добавить условие, как показано ниже

foreach($mydata->tags as $tag) { 
    if(isset($tag->category_name) && $tag->category_name == 'Quality') { 
      echo $tag->name; 
    } 
} 
+0

Отлично, спасибо. Я скоро приму ответ, когда это позволит мне. – MitchCool1

+1

А, ты избил меня .. имеют upvote :-p – Catharsis

+0

Спасибо, что помогли –

1

Вы можете использовать isset, чтобы проверить наличие данных, чтобы убедиться, что ваше условие истинно, прежде чем эхо-ки свое имя. Что-то вроде ...

foreach ($json->rgDescriptions as $mydata) 
{ 
    foreach ($mydata->tags as $tag) { 
     if (isset($tag->category_name) && $tag->category_name == 'Quality') { 
      echo $tag->name; 
     } 
    } 
}