$ STR = 'input_arr [ “用户名”]';
$ input_arr =阵列();
$$ STR = 'ABCD';
的print_r($ input_arr);
当我运行上面的代码时,它只打印Array()。
我希望它能打印数组([用户名] =>'abcd')
我做错了什么?
顺便说一下,这是在php 4中。
非常感谢。
编辑:我想做什么?
$ input_arr应该是一个静态变量来保存有效的用户输入。但是,我最近才意识到 php4.3不支持self :: $ input_arr所以我必须编辑我的脚本到bar($ input_arr ['name'],$ value);这样我就可以将值保存到bar()中的静态变量;因为$ input_arr ['name']在当前作用域中不存在,所以我不得不把它变成一个字符串。
答案 0 :(得分:3)
我会尽力避免eval
。使用PHP的内置标记器。
<?php
error_reporting(-1);
$input = array(3 => array(5 => 'some value'));
echo '$input: '; var_dump($input);
echo '$input[3][5] (directly): '; var_dump($input[3][5]);
$str = '$input[3][5]';
echo "$str (as a variable variable): "; var_dump($$str);
echo "$str (using eval - don't use this!): "; var_dump(eval("return $str;"));
$var = null;
foreach (token_get_all("<?php $str") as $token) {
if (isset($token[1]) && $token[1] === '<?php') {
continue;
}
if (isset($token[0]) && $token[0] === T_VARIABLE) {
$varName = substr($token[1], 1);
$var = $$varName;
} else if ($token === '[') {
$currentIndex = null;
} else if (isset($token[0]) && $token[0] === T_LNUMBER) {
$currentIndex = $token[1];
} else if ($token === ']') {
$var = $var[$currentIndex];
} else {
// Handle/complain about unrecognized input.
}
}
echo "$str (using tokenizer): "; var_dump($var);
输出:
$input: array(1) { [3]=> array(1) { [5]=> string(10) "some value" } } $input[3][5] (directly): string(10) "some value" $input[3][5] (as a variable variable): Notice: Undefined variable: $input[3][5] in - on line 10 NULL $input[3][5] (using eval - don't use this!): string(10) "some value" $input[3][5] (using tokenizer): string(10) "some value"
答案 1 :(得分:0)
仍然很难说出你想要做什么,但听起来你希望$str
确定一个数据内部$input_arr
的存在位置。如果是这样,您应该只存储$str
中的数组键,而不是代码的字符串表示。
在上一个示例中,它就像设置$str = 'name'
然后使用$input_arr[$str]
访问$input['name']
一样简单。在第一种情况下,您可以使用数组$keys = array(3,5)
而不是$str
,然后$input_arr[$keys[0]][$keys[1]]
将等同于$input_arr[3][5]
。
答案 2 :(得分:0)
如果你真的想要它,它可以使用2个变量。如果使用对数组的引用而不是变量变量,那就更好了。
$input_arr = Array();
function somefunction($array, $key)
{
${$array}[$key] = 'abcd';
}
function betterfunction(&$array, $key)
{
$array[$key] = 'abcd';
}
somefunction('input_arr', 'username');
betterfunction($input_arr, 'username');