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

时间:2014-06-11 16:58:31

标签: php arrays variable-assignment associative

我正在尝试从代码中删除eval()

目前我使用:

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

$xyz(也是一个多维数组)分配给$mkt_data的特定分支。

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

有一种聪明的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用以下功能:

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;
}

示例:

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

结果:

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

    )

)