php - 在多维 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
….
有人可以帮我吗?先感谢您!
解决方案
您在这里有几个更简单的选择。
第一个是如果您通过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');
推荐阅读
- javascript - 如何在保存之前向 JSON 字符串添加新的键/值
- python - 如何将一张图的网格、散点和趋势绘制为单独的文件
- angular - Angular7 - 实现延迟加载时出错
- excel - 将 Excel 工作表设置为变量,并在不同的子程序中调用该变量
- c# - C# 从 BT LE 设备转换字节数组
- swift - 是否有任何非书面规则规定关联类型不应受具体类型的约束?
- bash - Azure Devops 内联 bash 脚本子外壳输出作为任务组的变量
- excel - 根据动态条件选择行
- python - 内核和线程的多处理功能
- python - 登录 django 使用自定义格式化程序