使用eval()分配给数组的动态分支

I am trying to remove eval() from my code.

Currently I use:

eval( "$mkt_data" . $branch . " = $xyz" );

to assign $xyz (which is also a multidimensional array) to the specific branch of $mkt_data.

$branch can be 1, 2 or 3 levels deep, i.e.
$branch = "['mkt1']['offer']['bid']";
or
$branch = "['status']";

is there a clever way to do this?

You can use a function like this:

function set(&$ary, $keys, $value) {
    $last = array_pop($keys);
    foreach($keys as $k) {
        if(!isset($ary[$k]))
            $ary[$k] = array();
        $ary = &$ary[$k];
    }
    $ary[$last] = $value;
}

Example:

$data = array();
set($data, array('foo', 'bar', 'baz'), 42);
print_r($data);

Result:

Array
(
    [foo] => Array
    (
        [bar] => Array
        (
            [baz] => 42
        )

    )

)