使用php获取数组中的匹配项
我需要从json数组中获取一个特殊的条目,它应该由id匹配使用php获取数组中的匹配项,php,json,api,Php,Json,Api,我需要从json数组中获取一个特殊的条目,它应该由id匹配 { "response": { "count": 62, "inventory": [ { "id": 10, "style": 982 },
{
"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'])
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'];
}
}