Php 将嵌套对象链存储在变量中
假设我有一个这样的物体Php 将嵌套对象链存储在变量中,php,Php,假设我有一个这样的物体 { "status": "AlreadyVerified" } 我想把propert键存储在变量中,这样我就可以像 $key = 'status'; echo $object->$key 但是如果我有一个嵌套对象,比如 { "extra_info": {#305 ▼ +"status": "AlreadyVerified" } } 这行不通 $key = 'extra_info->status'; echo $object
{
"status": "AlreadyVerified"
}
我想把propert键存储在变量中,这样我就可以像
$key = 'status';
echo $object->$key
但是如果我有一个嵌套对象,比如
{
"extra_info": {#305 ▼
+"status": "AlreadyVerified"
}
}
这行不通
$key = 'extra_info->status';
echo $object->$key
如何将嵌套对象链存储在变量中,以便使用该变量访问其属性
最好是某种既适用于嵌套对象又适用于平面对象的方法(我想这就是所谓的!)这是一种方法,尽管可能不安全,这取决于
$key
的来源:
<?php
$object = new stdClass();
$object->extra_info = new stdClass();
$object->extra_info->status = 'AlreadyVerified';
$key = 'extra_info->status';
eval( 'echo $object->'.$key.';' );
可以通过如下方式编写帮助函数:
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');
thanx,我要试试$密钥存储在数据库中,所以由管理员提供,所以没问题,我猜是的,thanx我将进行投票,但我将使用@brevis方法,因为我不喜欢评估。。。thanx Again手边的问题显示了一个嵌套在对象中的对象代码>和其他阵列变体失败。echo deepFind($o,'extra_info->status')代码>