首页 > 解决方案 > 在多维 Stdclass PHP 中搜索

问题描述

我想在 PHP 中搜索特定对象。例如[module] =>在 StdClass 对象中播放,我如何在类本身中搜索值?

您可以在下面找到整个数组:

            [flow] => stdClass Object
                (
                    [data] => stdClass Object
                        (
                            [action] => start
                        )

                    [module] => record_call
                    [children] => stdClass Object
                        (
                            [_] => stdClass Object
                                (
                                    [data] => stdClass Object
                                        (
                                            [id] => 7696364e90822fdcba4feee30574a7e2
                                            [endless_playback] => 
                                            [terminators] => Array
                                                (
                                                    [0] => 1
                                                )

                                        )

                                    [module] => play
                                    [children] => stdClass Object
                                        (
                                            [_] => stdClass Object
….

我想得到如下输出:

                                    [data] => stdClass Object
                                        (
                                            [id] => 7696364e90822fdcba4feee30574a7e2
                                            [endless_playback] => 
                                            [terminators] => Array
                                                (
                                                    [0] => 1
                                                )

                                        )

                                    [module] => play
                                    [children] => stdClass Object
                                        (
                                            [_] => stdClass Object
….

有人可以帮我吗?先感谢您!

标签: phparraysobject

解决方案


您在这里有几个更简单的选择。

第一个是如果您通过json_decode()调用接收此数据,请添加true为第二个参数:

$decoded = json_decode($data, true);

第二个是通过利用上述和使用将其转换为简单的关联数组结构json_encode()

$decoded = json_decode(json_encode($data), true);

使用您的简单数组结构,现在可以递归遍历数组以找到所需的匹配键/值对:

function findModule($data, $module_name) {
    if(!is_array($data)) return null;

    if(array_key_exists('module', $data)) {
        if($data['module'] === $module_name) {
            return $data;
        }
    }

    foreach($data as $key=>$val) {
        $result = findModule($val, $module_name);
        if(!is_null($result)) {
            return $result;
        }
    }

    return null;
}

// Will either return the array of array('data'=>..., 'module'=>'play', 'children': ...) or null if no matching module found.
$module = findModule($decoded, 'play');

推荐阅读