考虑
$vars为您的变量,你想获得
one['one-one']或
two['two-two']['more']从(演示):
$vars = function($str) use ($vars){ $c = function($v, $w) {return $w ? $v[$w] : $v;}; return array_reduce(preg_split('~['|']~', $str), $c, $vars);};echo $vars("one['one-one']"); # helloecho $vars("two['two-two']['more']"); # tea-time!这是乐星串入 密钥 令牌,然后遍历
$vars在阵列 带键 的值,而
$vars阵列已变成了功能。
旧资料:
用一个只是eval的函数重载数组:
$vars = array( 'one' => array( 'one-one' => "hello", 'one-two' => "goodbye" ), 'two' => array( 'two-one' => "foo", 'two-two' => "bar" ));$vars = function($str) use ($vars){ return eval('return $vars'.$str.';');};echo $vars("['one']['one-two']"); # goodbye如果您不喜欢eval,请更改实现:
$vars = function($str) use ($vars){ $r = preg_match_all('~['([a-z-]+)']~', $str, $keys); $var = $vars; foreach($keys[1] as $key) $var = $var[$key]; return $var;};echo $vars("['one']['one-two']"); # goodbye


