如何合并或搜索对象?

时间:2014-07-24 22:33:41

标签: php json object

这是我的问题:

我有一个对象,里面装满了这样的数组。

[376339] => Array
    (
        [0] => 1f422730-f54b-4e4d-9289-10258ce74446
        [1] => 60dc4646-06ce-44d0-abe9-ee371847f4df
    )

我需要搜索另一个对象来查找具有匹配ID的对象,如下所示。有没有办法在没有foreach的情况下这样做?有SEVERAL,我不想每次都遍历整个对象。

stdClass Object
(
    [id] => 1f422730-f54b-4e4d-9289-10258ce74446
    [percentage] => 32
    [destinations] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 59826
                    [destination_id] => 59826
                    [type] => Destination
                    [dequeue] => 
                    [value] => xxxxxxxxxxx
                )

        )

)
stdClass Object
(
    [id] => 60dc4646-06ce-44d0-abe9-ee371847f4df
    [percentage] => 68
    [destinations] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 60046
                    [destination_id] => 60046
                    [type] => Destination
                    [dequeue] => 
                    [value] => xxxxxxxxxxxx
                )

        )

)

我需要它最终看起来像这样。

[376339] => Array
    (
        [0] => Array
            (
                [id] => 1f422730-f54b-4e4d-9289-10258ce74446
                [percentage] => 32
                [destinations] => Array
                    (
                        [0] => stdClass Object
                            (
                                [id] => 59826
                                [destination_id] => 59826
                                [type] => Destination
                                [dequeue] => 
                                [value] => xxxxxxxxxxx
                            )
                    )
            )
        [1] => Array
            (
                [id] => 60dc4646-06ce-44d0-abe9-ee371847f4df
                [percentage] => 68
                [destinations] => Array
                    (
                        [0] => stdClass Object
                            (
                                [id] => 60046
                                [destination_id] => 60046
                                [type] => Destination
                                [dequeue] => 
                                [value] => xxxxxxxxxxxx
                            )

                    )
            )
    )

我不确定这是否有意义,这就是为什么我有两个初始输出我需要以某种方式合并为一个。这一切都来自一个巨大的json对象,我只是使用json_decode($jsonStuff)来解码它。

如果我在解码函数中添加true,这会更容易吗?如果我可以像在python中那样搜索它,那将是整洁的。但事实上,我对如何获得我需要的输出感到茫然。

注意:输入json不能更改,我与创建它的人没有联系。

1 个答案:

答案 0 :(得分:1)

首先循环输入数组并使用键作为id

创建一个数组
$input = json_decode($json_input);
$output = array();
foreach($input as $obj){
    $output[$obj->id] = $obj;
}

然后你可以通过搜索数组键上的id来构建你的另一个数组

$massive_search_array = array(376339 => array
    (
        0 => 1f422730-f54b-4e4d-9289-10258ce74446,
        1 => 60dc4646-06ce-44d0-abe9-ee371847f4df
    )
);

$final_output = array();
foreach($massive_search_array as $index => $searches){
    foreach($searches as $search){
        if(isset($output[$search])){
            $final_output[$index][] = $output[$search];
        }
    }
}