【问题标题】:PHP Access nested object property via strings in arrayPHP通过数组中的字符串访问嵌套对象属性
【发布时间】:2023-03-14 17:36:01
【问题描述】:

假设我们有一个对象 $obj。该对象具有如下属性:

$obj->p1->p2->p3 = 'foo';

现在我得到一个数组中的嵌套属性结构:

$arr = array( 'p1', 'p2', 'p3' );

目前我使用以下函数来相应地访问该属性:

function getProperty( $obj, $property ) {
foreach( $property as $p ) {
  $obj = $obj->{$p};
 }
 return $obj;
}

$value = getProperty( $obj, $arr); // = 'foo'

有没有更聪明的方法来做到这一点(不,'eval' 不是一个选项!;))?

【问题讨论】:

  • 如果它有效,你为什么要改进它。
  • 没有急需改变它。但是好像有点复杂,不是很优雅。
  • 此外,这是一个非常复杂的脚本的一部分,执行时间是一个相关点......
  • 我不认为你可以让它“更漂亮”。这是使用 array_reduce 的 foreach 的替代方法。 function getProperty($object, array $keys) { return array_reduce($keys, function($carry, $item) { return $carry->{$item}; }, $object); }
  • 谢谢!我越想,我就越觉得真的没有“更漂亮”的方式。 ;)

标签: php oop properties


【解决方案1】:

如果你想让它变成一行或者更漂亮一点,你可以试试这个:

echo json_decode(json_encode($obj), true)['p1']['p2']['p3']; // PHP 5.4

或者对于 PHP 5.3:

$arr = json_decode(json_encode($obj), true);
echo $arr['p1']['p2']['p3'];

这是你想要达到的目标吗?

【讨论】:

  • 现在看起来不错。 ;) 但是对象可能非常大,具有许多属性。必须检查 json 编码和解码的执行时间。
猜你喜欢
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
相关资源
最近更新 更多