猿问

通过匹配值从数组中获取值

我想通过将值classid和instanceid与另一个 json 打印相匹配来从 json 打印中获取值assetid。


让我说得更清楚。


我尝试了不同的东西,但我只是不知道从哪里开始。它根本没有给我任何结果。


情况就是这样。


这是第一个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。


这就是我的代码目前的样子,它只打印出第二个json 打印。


if(isset($inventories['descriptions'])) {

    foreach($inventories['descriptions'] as $key => $description) {

        //Testing                               

        $inv = $inventories['assets'][$description['classid'].'_'.$description['instanceid'];

    }

}


aluckdog
浏览 214回答 1
1回答

墨色风雨

我对您的问题的理解如下:给定一个 JSON 对象列表(您称它们为打印),您想assetid根据其他拥有一个并匹配classid和instanceid字段的对象,将值分配给那些还没有的对象。解决此问题的一种方法是:对 JSON 对象进行排序,使具有assetid字段的对象排在最前面。当您检索数据(某些 API 查询?)或稍后使用例如usort()时,可能会发生这种情况初始化一个空数组,我们称之为assetids。这将在稍后将classid_instanceid配对(字符串连接,如您的代码)映射到资产 ID。遍历 JSON 对象列表。对于这些对象中的每一个:如果存在,则您拥有匹配的assetid.如果不是,assetid则不存在匹配。如果它确实有一个assetid字段:将它与classid和instanceid作为键的串联保存在一起assetids如果它不是有一个assetid字段:检查assetids为串联阵列classid和instanceid。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/8528014usort($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 100Object e has assetid 200Object b has assetid 200Object c has assetid 100Could not find assetid for object d
随时随地看视频慕课网APP
我要回答