有时我们想这样访问数组$a的元素$varStr = "$a['a']['a_a']";.今天就做罗列下实现的两大类方法:
1.使用eval()

$varStr = "\$vars['a']['a_a']";
$value = eval("return $varStr;");

2.一层层遍历取值

$vars = function($str) use ($vars)
{
    if (!preg_match_all('#\[[\"\'](.+?)[\"\']\]#', $str, $keys)) {
        return null;
    }
    $var = $vars;
    foreach($keys[1] as $key){
        $var = $var[$key];
    }
    return $var;
};
$vars("['a']['aa']");//用法

#为了简洁,我们可以给他封装成一个函数
function initVar(&$vars)
{
    $vars = function($str) use ($vars)
    {
        if (!preg_match_all('#\[[\"\'](.+?)[\"\']\]#', $str, $keys)) {
            return null;
        }
        $var = $vars;
        foreach($keys[1] as $key) {
            $var = $var[$key];
        }
        return $var;
    };
}
//然后这样使用
initVar($vars);
$vars('["a"]["aa"]');

//或者封装成这样
function getValue($vars, $str)
{
    if (!preg_match_all('#\[[\"\'](.+?)[\"\']\]#', $str, $keys)) {
        return null;
    }
    $var = $vars;
    foreach ($keys[1] as $key) {
        $var = $var[$key];
    }
    return $var;
}
//然后这样使用
get($vars, '["a"]["aa"]');

参考:https://stackoverflow.com/questions/7003559/use-strings-to-access-potentially-large-multidimensional-arrays

标签: none

添加新评论