【问题标题】:php dynamic property accessor for nested properties [duplicate]用于嵌套属性的php动态属性访问器[重复]
【发布时间】:2018-04-23 17:07:54
【问题描述】:

我能做到:

$key = 'address';
$user->{$key}

有没有办法让这个工作更深层次?不知道提前多少级。

$key = 'address->street';
$user->{$key}

这是我真正想要实现的目标:

$filterIds = [];
$filterIds['facebook->followers'] = 1;
$filterIds['googleplus->followers'] = 2;
$filterIds['instagram->followers'] = 3;
...

    foreach($filterIds as $filterKey => $filterId) {
        if(self::property_path_exists($data, $filterKey)) {
            $filter = new ResultFilter;
            $filter->result_filter_id = $filterId;
            $filter->value = $data->{$filterKey};
            $filter->save();
        }
    }

【问题讨论】:

  • 'address->street' 它在源数据中的实际外观。如果没有,如何说明您是如何获取这些数据的?
  • @PatrickQ 是的,数据将是 $user->address->street
  • 我知道您想要生产,但实际的输入是什么?您在哪里/如何获得 $key 的价值?
  • @PatrickQ 我已经用一个例子更新了这个问题

标签: php


【解决方案1】:

例子

<?php

$v = new stdClass;
$v->x = new stdClass;
$v->x->y = new stdClass;
$v->x->y->z = "wow";

$keys = "x->y->z";

$t = &$v;
foreach (explode("->", $keys) as $key) {
    // @TODO add isset($t->{$key})
    $t = &$t->{$key};
}

print($t . PHP_EOL);

$t = "changed";

print($v->x->y->z . PHP_EOL);

当您要编辑此嵌套对象时,请记住使用引用 (&amp;)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    相关资源
    最近更新 更多