我可以得到帮助以了解这是否可行吗?
我想动态选择数组。
例如,
$oj = (object)['A' => (object)['B' => (object)['C' => (object)['D' => []]]]]
$E = 'A'
$oj->$E // this will work
$E = 'A->B'
$oj->$E // this will not work
除了写完整路径还能做什么?或者请告诉我这是否可能,或者是否有我可以引用的示例?
$oj[A][B][C][D] <---NO
$oj->A->B->C->D <---NO
$E = A->B->C->D
$oj->E <--What I want
Question Update:
$oj->E = 'Store something' <-What I want, then will store into $oj.
//So E here is not pick up the value of D, but the path of D;
非常感谢。
最佳答案
可以通过->
展开路径,部分路径跟踪对象:
function getPath($obj,$path) {
foreach(explode('->',$path) as $part) $obj = $obj->$part;
return $obj;
}
例子
$oj = (object)['A' => (object)['B' => (object)['C' => (object)['D' => []]]]];
$E = 'A->B->C->D';
getPath($oj,$E);
如果你也想写,你可以用 eval
来写,但很简单:
eval("\$tgt=&\$oj->$E;"); // $tgt is the adress of $oj->A->B->C->D->E
print_r($tgt); // original value of $oj->A->B->C->D->E
$tgt = "foo";
print_r($oj); // $oj->A->B->C->D->E = "foo"
关于php按路径选择数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19990459/