如何通过数组值引用嵌套类值

时间:2016-11-02 04:48:22

标签: php stdclass

我认为解释我的问题的最好方法是举个例子。说我有以下物体。

$data=new stdClass;
$data->test=new stdClass;
$data->test->test2=6;
$data->s=array('b',6,7);

我想知道如何将键值作为数组读取或更改对象中的任何值。

我知道以下不会起作用:

function doSomething($inputArray1,$inputArray2) {
    $data[  $inputArray1   ]; //6
    $data[  $inputArray2   ]=4; //was array('b',6,7);
}

//someone else provided
doSomething( array('test','test2')  , array('s')  );

更改以明确我不知道数组的值如此使用 $data->test->test2;像往常一样赢得6个人的工作。也不知道阵列长度。

2 个答案:

答案 0 :(得分:1)

想出来:

$parts=array('test','test2');


$ref=&$data;
foreach($parts as $part) {
    if (is_array($ref)) {
        $ref=&$ref[$part]; //refrence next level if array
    } else {
        $ref=&$ref->$part; //refrence next level if object
    }
}
echo $ref; //show value refrenced by array
$ref=4; //change value refrenced by array(surprised this works instead of making $ref=4 and breaking the refrence)
unset($ref); //get rid of refrence to prevent accidental setting.  Thanks @mpyw

答案 1 :(得分:0)

正如我在评论中提到的,您需要按预期访问对象/数组。 他们的注释如下;

  • 对象:->
  • 数组:[]

因此,根据您生成的$data数组,您必须访问对象/数组组合:

echo $data->s[2];

Example/Demo

如果您要访问初始test/test2 itteration(设置为对象->),那么您需要将其作为对象访问:

echo $data->test->test2;