我有一个递归数组,它的深度是可变的,我希望能够接受一个带分隔符的字符串并将该字符串转换为该数组的索引,
例如$path = 'level1.level2.level3';
将被转换为从
下面的数组中获取值'my data'$data['level1']['level2']['level3'] = 'my data';
我认为最快的方法是使用变量变量,但是当我尝试下面的代码
$index = "data['level1']['level2']['level3']";
echo $$index;
我得到以下错误
PHP Notice: Undefined variable: data['level1']['level2']['level3']
我能想到的所有其他方法都是非常低效的,有人能解释一下吗,在PHP中使用变量变量的数组是可能的吗?还有其他有效的解决方法吗?
许多谢谢。你将不得不循环数组,你不会设法做到这一点使用变量变量,据我所知。这似乎可以工作:
<?php
function retrieve( $array, $path ) {
$current = $array;
foreach( explode( '.', $path ) as $segment ) {
if( false === array_key_exists( $segment, $current ) ) {
return false;
}
$current = $current[$segment];
}
return $current;
}
$path = 'level1.level2.level3';
// will be converted to get the value 'my data' from the array below
$data['level1']['level2']['level3'] = 'my data';
var_dump( retrieve( $data, $path ) );
这是一个棘手的问题,这是我能想到的最有效的方法:
function get_value_from_array ($array, $path, $pathSep = '.') {
foreach (explode($pathSep, $path) as $pathPart) {
if (isset($array[$pathPart])) {
$array = $array[$pathPart];
} else {
return FALSE;
}
}
return $array;
}
返回值,如果失败则返回FALSE。
Try
$index = "data";
echo $$index['level1']['level2']['level3'];
而不是,因为$index
应该只有变量名
像这样:
eval('$data['''.implode("']['",explode('.',$path))."'] = 'my data';");
…但是千万不要告诉别人是我让你这么做的
可以这样使用eval
函数:
$data['level1']['level2']['level3'] = 'my data';
eval("'$index = '$data['level1']['level2']['level3'];");
echo $index;