有时我们想这样访问数组$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