我目前无法访问一个数组,其中数组的名称由$ _GET定义.
如果我有以下数组:
$test = array('Hello', 'Apples', 'Green');
$AnotherArray = array('Blue', 'Sun');
Run Code Online (Sandbox Code Playgroud)
然后我想显示数组$ test,当我打开我的脚本时:
ajax.php?arrayName=test
Run Code Online (Sandbox Code Playgroud)
我在这里先向您的帮助表示感谢.
您可以使用变量变量完成此操作:
$the_array = ${$_GET['arrayName']};
Run Code Online (Sandbox Code Playgroud)
重要
这就像使用炸药一样,因为恶意用户可以轻松地将变量名称与其他东西交换并破坏您的应用程序.
最佳做法是首先将变量名称列入白名单:
$safe_vars = array('test', 'AnotherArray');
if (in_array($_GET['arrayName'], $safe_vars, true)) {
$the_array = ${$_GET['arrayName']};
}
Run Code Online (Sandbox Code Playgroud)
替代
正如所提到的佩卡웃,你也可以考虑有一个母亲阵列内的访问数组:
$arrays = array(
'test' => array('Hello', 'Apples', 'Green'),
'AnotherArray' = array('Blue', 'Sun')
);
if (isset($arrays[$_GET['arrayName']])) {
$the_array = $arrays[$_GET['arrayName']];
}
Run Code Online (Sandbox Code Playgroud)
这里的好处是没有使用魔法,只需简单的阵列解除引用.
请不要为这个简单的任务使用变量变量:
通常,只使用"arrayName"或类似参数作为建议,并且不要直接使用用户输入,以保证安全.
在这种情况下,我实际上只是建议使用一个整数:
url?showdata=1 //Shows the $test array
Run Code Online (Sandbox Code Playgroud)
和
url?showdata=2 // Shows the $AnotherArray
Run Code Online (Sandbox Code Playgroud)
等等
url?showdata=3 // Shows another array of your choice
Run Code Online (Sandbox Code Playgroud)
或者如果你必须使事情复杂化,只需检查?arrayName =是否恰好等于'test'或者恰好等于'AnotherArray'然后使用指定的数组.
同样,变量变量是一种复杂性和麻烦,你可能会对这种简单的情况感到后悔!