php 4变量变量

时间:2010-08-17 13:09:32

标签: php arrays variables

$ 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']在当前作用域中不存在,所以我不得不把它变成一个字符串。

3 个答案:

答案 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');