我有一个不同深度的物体。
stdClass Object
(
[1] => stdClass Object
(
[color] => green
)
[9] => stdClass Object
(
[optgroup] => stdClass Object
(
[4] => stdClass Object
(
[OPTION] =>
)
[5] => stdClass Object
(
[OPTION] => stdClass Object
(
[2] => stdClass Object
(
[DataSubtext] => SUBTEXT of
)
[3] => stdClass Object
(
[DataIcon] => glyphicon-heart
)
)
)
)
)
)
我想在html页面中编辑此对象的数据,并且需要在单击后访问特定属性。但我事先并不知道深度,即“颜色”。是2级但是#OPOP'是6级。 当我用路径创建一个字符串时(例如$ string =' {9} - > optgroup - > {2} - > OPTION - > {2} - > THEOPT')和
后添加 $var = $myobject -> $string ;
我必须使用eval来获取和设置属性,但应该避免这种情况。 我考虑过每个级别的案例......,
switch ($depth) ...
case 1...
case 2...
那么如何以最佳方式使用变量处理任何属性? 我想出了这个解决方案。它是一个递归函数,返回我需要的三个属性。该数组是作为数组的属性,即9,optgroup,2等
我想知道php没有提供一个简单的界面来精确编辑对象。
function getObjectValue ( $object, $array ){
if ( $array[1] == '' ) {
$f = new stdClass;
$f -> POS = $array[0];
foreach( $object -> {$array[0]} as $key => $value ) {
$f -> name = $key;
$f -> value = $value;
}
return $f ;}
if ( is_object( $object -> {$array[0]} ) ){
$next = array_shift($array) ;
$result = getObjectValue( $object -> {$next} , $array );
}
return $result;
}
答案 0 :(得分:0)
我不知道这是否可以解决你的问题,无论如何
$array = json_decode(json_encode($your_std_class_object), true);
这将以数组格式获取对象,因此通过使用数组,您可以简单地迭代,并检查它是否有一个子节点,并找出数组的深度。