dougan1465 2014-06-11 16:58
浏览 39

使用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?

  • 写回答

1条回答 默认 最新

  • dongxianglun5163 2014-06-11 17:31
    关注

    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
            )
    
        )
    
    )
    
    评论

报告相同问题?

悬赏问题

  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程