所以可以说我有一个像这样的对象
{
"status": "AlreadyVerified"
}
并且我想将propert键存储在变量中,这样我就可以使用该变量(如
)访问属性$key = 'status';
echo $object->$key
但是如果我有一个像
这样的嵌套对象怎么办{
"extra_info": {#305 ▼
+"status": "AlreadyVerified"
}
}
这行不通
$key = 'extra_info->status';
echo $object->$key
如何将嵌套对象链存储在变量中,以便可以使用该变量访问其属性?
最好是某种既适用于嵌套对象又适用于平面对象的方法(我想这就是所谓的!)
答案 0 :(得分:1)
这是一种实现方法,尽管根据$key
的来源可能不安全:
<?php
$object = new stdClass();
$object->extra_info = new stdClass();
$object->extra_info->status = 'AlreadyVerified';
$key = 'extra_info->status';
eval( 'echo $object->'.$key.';' );
输出:
已验证
此外,如果您想解析$key
,则可以使用递归函数来访问嵌套值。
答案 1 :(得分:1)
可以通过这样的写辅助函数来实现:
function deepFind($o, $key) {
$key = explode('->', $key);
$value = $o;
foreach ($key as $i=>$k) {
if (is_object($value) && isset($value->{$k})) {
$value = $value->{$k};
} elseif (is_array($value) && isset($value[$k])) {
$value = $value[$k];
} elseif ($i == count($key) - 1) {
$value = null;
}
}
return $value;
}
用法:
$o = (object)[
"extra_info" => (object)[
"status" => "AlreadyVerified"
]
];
echo deepFind($o, 'extra_info->status');