我想通过将值 classid 和 instanceid 与另一个json打印匹配来从json打印获得值资产。
让我说得更清楚。
我尝试了不同的方法,但是我不知道从哪里开始。它根本没有给我任何结果。
是这种情况。
这是第一个 json打印。
[22] => Array (
[appid] => 730
[contextid] => 2
[assetid] => 15722336716
[classid] => 310776570
[instanceid] => 302028390
[amount] => 1
)
如您所见,它包含一个我需要获取的名为 assetid 的值。
这是第二 json打印。
[6] => Array (
[appid] => 730
[classid] => 310776570
[instanceid] => 302028390
[currency] => 0
)
classid和instanceid是匹配的,但是我需要通过匹配第二个json打印中的classid和instanceid来从第一个json打印中获取资产id。
这是我的代码当前的样子,仅打印出 second json打印内容。
if(isset($inventories['descriptions'])) {
foreach($inventories['descriptions'] as $key => $description) {
//Testing
$inv = $inventories['assets'][$description['classid'].'_'.$description['instanceid'];
}
}
答案 0 :(得分:0)
我理解您的问题如下:给定JSON对象列表(您称它们为打印件),您想根据其他具有一个JSON对象的对象,将assetid
值分配给那些还没有的对象并匹配classid
和instanceid
字段。
解决此问题的一种方法是:
assetid
字段的对象优先出现。当您检索数据(某些API查询?)时,或稍后使用例如usort() assetids
。稍后会将classid_instanceid
对(字符串连接,如您的代码中)映射到资产ID。assetid
字段:将它与classid
和instanceid
的串联保存在一起作为assetids
中的键assetid
字段:检查assetids
数组中classid
和instanceid
的串联。
assetid
。assetid
。PHP实现可能如下所示(为简单起见,我使用数组而不是JSON对象):
// Some example data
$data = Array(
Array (
"name" => "a",
"assetid" => 100,
"classid" => 1,
"instanceid" => 1,
),
Array (
"name" => "b",
"classid" => 2,
"instanceid" => 1,
),
Array (
"name" => "c",
"classid" => 1,
"instanceid" => 1,
),
Array (
"name" => "d",
"classid" => 3,
"instanceid" => 1,
),
Array (
"name" => "e",
"assetid" => 200,
"classid" => 2,
"instanceid" => 1,
)
);
// Make sure entries with "assetid" field come first
// See https://stackoverflow.com/a/5897975/8528014
usort($data, function ($a, $b)
{
return isset($b['assetid']) - isset($a['assetid']);
});
// Determine assetids
$assetids = Array();
foreach($data as $obj)
{
if(isset($obj['assetid']))
{
$key = $obj['classid'].'_'.$obj['instanceid'];
$assetid = $obj['assetid'];
$assetids[$key] = $assetid;
echo "Object ".$obj['name']." has assetid $assetid\n";
}
else
{
$key = $obj['classid'].'_'.$obj['instanceid'];
if(!isset($assetids[$key]))
echo "Could not find assetid for object ".$obj['name']."\n";
else
{
$assetid = $assetids[$key];
echo "Object ".$obj['name']." has assetid $assetid\n";
}
}
}
输出为:
Object a has assetid 100
Object e has assetid 200
Object b has assetid 200
Object c has assetid 100
Could not find assetid for object d