在php中有variable variable names:
如例子所示:
$a = 'hello';
$$a = 'world';
echo $hello; // outputs world
现在,我们还有嵌套数组:
$myvar = Array(
'a' => Array('b' => 1, 'c' => 2),
'd' => Array('e' => 3, 'f' => 4)
);
echo $myvar['a']['e']; // outputs e
问题:是否可以使用变量名访问此类数组?
如下所示:
$myvarname = 'myvar[a][e]';
echo $$myvarname;
如果是 - 怎么样?
编辑:
我要做的是在循环中构建一个数组。我不知道传入的数据,所以数组可以是任何级别的深度。
有许多输入行的格式如下:
/katalog/category1/subcategory1/subcategory2
我通过输入行循环,并用" /"分割URL。
之后我尝试构建一个数组,它将代表所有网址的结构。
category 1
--> subcategory 1
--> subcategory 2
--> subcategory 3
--> subcategory 4
category 2
--> subcategory 5
category 3
category 4
问题的主要部分是如何将变量变量用于嵌套数组。如果可能的话。我包括了实际的用例,因为有人问我如何在现实生活中使用它。不需要解决我的问题 - 我可以自己解决这个问题。
但是,变量使用变量 - 这才是真正的问题。
答案 0 :(得分:1)
可以使用eval()
完成 :
$myvarname = "myvar['a']['b']";
eval("\$result = \${$myvarname};");
var_dump($result);
输出:
int(1)
但是使用eval()
通常是一个坏主意,特别是如果这涉及用户输入。该函数允许执行任意代码 - 这意味着具有恶意意图的用户可以在您的服务器上执行有害代码。这只是一个POC,在生产代码中应该 不 。
答案 1 :(得分:1)
我建议使用递归来解决这个问题。我对输出的结构并不是100%肯定,但希望这应该能指出你正确的方向:
function createArray($pieces, $array){
if(count($pieces) > 1){
$key = array_shift($pieces);
$array[$key] = createArray($pieces, isset($array[$key]) ? $array[$key] : []);
}
else{
$array[$pieces[0]] = [];
}
return $array;
}