从JSON中的数组数组中获取元素

时间:2015-06-17 15:08:22

标签: php arrays json

使用此JSON作为示例:http://steamcommunity.com/id/berthiest/inventory/json/730/2/我正在尝试在数组数组中获取数组中的特定元素。它也与这些数组中的其他元素具有相同的名称。这是我现在使用的PHP代码。

$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并测试此代码,您会注意到"name"数组中有许多"tags"个元素。我想要的唯一“name"元素是数组中包含"category_name":"Quality"的元素。

我无法选择数组编号来获取"name",如下所示:

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

因为整个JSON中"tags"中的数组数量不同。

"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"

那我该怎么做呢?

2 个答案:

答案 0 :(得分:4)

您可以添加以下条件

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

答案 1 :(得分:1)

您可以使用isset来测试数据是否存在,以确保您的条件为真,然后才能回显您的姓名。有点像...

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