php按路径选择数组

标签 php arrays object select

我可以得到帮助以了解这是否可行吗?

我想动态选择数组。

例如,

$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/

相关文章:

php - 如何在 Laravel 分页集合结果中添加自定义(新)列

php - htaccess 命令只允许来自同一服务器的请求(不指定 IP)

jquery - 循环遍历数据属性并创建一个数组

c++ - 我有一个 .csv 文件,想将其转换为 C++ 中的数组

arrays - Swift - 根据相同的特征对元素进行分组

java - 如何将一个对象转换为同一基类的不同对象?

c++ - 如何最好地处理 C++ 对象初始化 : empty constructors or pointers?

php - 如何将带有自定义链接的按钮添加到 WordPress 仪表板?

javascript - 如何统计 JavaScript 数组对象?

php - 将内容加载到应用程序的最佳方式