使用php获取数组中的匹配项

使用php获取数组中的匹配项,php,json,api,Php,Json,Api,我需要从json数组中获取一个特殊的条目,它应该由id匹配 { "response": { "count": 62, "inventory": [ { "id": 10, "style": 982 },

我需要从json数组中获取一个特殊的条目,它应该由id匹配

{
            "response": {
                "count": 62,
                "inventory": [
                    {
                        "id": 10,
                        "style": 982
                    },
                    {
                        "id": 20,
                        "style": 0
                    },
                    {
                        "id": 30,
                        "style": 1
                    }       ]
    }}
我现在拥有的所有信息都是以下代码:

$matching_value = 10;    
foreach($json_data as $key => $val){
    if($val->id == $matching_value){
      echo $val->id;
      echo $val->style;
       }
    }
但它不起作用,我不知道为什么。我的方法不适用于子条目吗?

给你

  • 您需要将json字符串解码为数组
  • 在foreach中,您使用了对象属性访问语法,我将其更改为数组访问($val->id…$val['id'])
我的方法不适用于子条目吗

不像你有。您必须测试您正在迭代的内容, 如果是字符串,int,数组。考虑嵌套等。 我重新分配了$inventory,使内部数组的迭代变得更容易,使您更接近该值

资料来源:

输出:
ID:10style982

1)解码json字符串2)但它不工作这意味着什么?你有错误吗<代码>PHP警告代码在第3行不起作用
$json\u data
“response”
中的元素,或者
“inventory”
中的元素,如果
返回$key在回显之前回显,它将永远不会回显。。。这就是您所期望的吗?我想您需要
foreach($key=>$val){
同样,JSON中有
id
,但也有
appid
id
的元素。这将前所未有地失败。谢谢你的回答!你的代码看起来像是我代码的缺失链接。但是我从一个包含文件\u get\u内容和JSON\u decode的url获取JSON数组。如果我使用你的代码,我只会得到一个internal错误。您有解决方案吗?可能是将json_decode的第二个参数设置为true的问题。这决定了您是获取数组还是对象,例如,
$jsonObject=json_decode(file_get_contents('source://json“);
。只需将其更改为
$jsonArray=json\u decode(file\u get\u contents(”)source://json",对)
简而言之:将true作为第二个参数添加到json_decode中,然后使用上面从
//准备迭代
开始的代码。如果这不能解决问题,请发布您收到的错误消息。我已经使用了您的建议和代码,但现在我得到了内部错误500错误,请参阅我的代码:
$contents=json_decode(file_get_contents)($steam_api_url,true);$json_data_a=$contents['response']['games'];foreach($json_data_a as$key=>$val){//var_dump($val);$if(isset($val['appid'])和&$val['appid'==$steam_game_id){echo'appid:'.$val['appid'];echo'时间:'.$val['playtime'''playtime'']
难以阅读。嗯。json解码未正确使用
关闭)
-
$contents=json解码(文件获取内容($steam\U api\U url,true)**)**
剩下的代码看起来没问题。你可以启用PHPs错误报告或查看日志,看看内部错误到底是什么。啊,是的,我关闭了json_decode-command的括号,现在错误消失了。但是现在我没有任何输出。我使用var_dump来显示从url获得的内容,但foreach循环没有提供取消任何输出,尽管var_dump返回一个对象。
// JSON string
$json = '{
    "response": {
        "count": 62,
        "inventory": [
            {
                "id": 10,
                "style": 982
            },
            {
                "id": 20,
                "style": 0
            },
            {
                "id": 30,
                "style": 1
            }
        ]
    }}
';

// debugging
var_dump($json, json_decode($json, true));

// decode json to array
$data = json_decode($json, true);

// prepare iteration

// reassign 
$inventory = $data['response']['inventory'];

$matching_value = 10;

foreach($inventory as $key => $val)
{
    //var_dump($val);

    if(isset($val['id']) && $val['id'] === $matching_value)
    {
      echo 'The ID: ' . $val['id'];
      echo 'The Style' . $val['style'];
    }
}