【发布时间】:2014-10-07 00:58:50
【问题描述】:
我有一些属性数组可以更改某些对象和值,以便以这种格式应用:
$toApply = array(
"post.author.status.time" => 0,
"page.title" => "My title",
"page.tags" => "My, Tags"
)
我有对象 $post 和 $page 是 stdClass 对象,所以我可以轻松编写像 $page->title = "My title" 这样的代码
我也知道我可以做到这一点
$prop = "title";
$page->{$prop} = "My title"
但它仅适用于 1 级对象。
问题是如何深入到对象内部(如果需要,如果对象还没有属性并且我有"page.someprop.deeperprop.deepprop.title",也可以创建所需的子属性)
我的 1 级函数如下所示:
function applyProp($prop, $value, $obj) {
$forSureObj = (object) $obj;
$forSureObj->{$prop} = $value;
return $forSureObj;
}
【问题讨论】:
-
$obj->{$lvl1}->{$lvl2}等?是这个意思吗? -
我知道,但是如何自动执行,因为我不知道参数的深度。我可以假设深度不会超过 10 并且对于每种情况都像你说的那样写我的代码,但它不是那么干净的解决方案(如果我找不到任何东西,我会这样做)
-
您认为如何使用递归?每次按
.拆分字符串,如果没有更深的层次,则应用分配。 -
所以这个字符串
post.author.title会将值分配给该属性:post->author['title']是吗?