如何动态引用php ARRAY变量


How to reffer dynamically to a php ARRAY variable(s)?

大家都知道在PHP中可以使用${'varName'}访问一个变量。但是,当你需要获取/设置一个变量,它是一个数组的一部分,为什么不工作?假设我们有这样一段代码:

<?php
   $myArray = array(...);
   $myVarName = "myArray['my1']['my11']['my111']";
   ${$myVarName} = "new value";
?>

它不应该工作吗?我已经测试了一遍又一遍-它不工作…有办法做到吗?

我建议您不要使用像${$var}这样的动态变量。您需要的是根据键的路径修改多维关联数组。

<?php
$myArray = array(...); // multi-dimensional array
$myVarPath = array('my1', 'my11', 'my111');
setValueFromPath($myArray, $myVarPath);
function getValueFromPath($arr, $path)
{
    // todo: add checks on $path
    $dest = $arr;
    $finalKey = array_pop($path);
    foreach ($path as $key) {
        $dest = $dest[$key];
    }
    return $dest[$finalKey];
}
function setValueFromPath(&$arr, $path, $value)
{
    // we need references as we will modify the first parameter
    $dest = &$arr;
    $finalKey = array_pop($path);
    foreach ($path as $key) {
        $dest = &$dest[$key];
    }
    $dest[$finalKey] = $value;
}

这是一个过程示例,以保持简单。你可能想把你的层次数组和这个函数放在一个类中。

它不应该工作吗?

大家都知道在PHP中可以这样访问变量:${'varName'}

是的。然而每个人都知道那很差劲。

如何动态引用php数组变量?

有一个('my1','my11','my111')的数组,你可以只使用一个循环来引用任何特定的数组成员。

可以做这样的事情,但这将是一个非常糟糕的主意。对不起上校;)

<?php
$mA = array();
$mVN = "mA['m1']['m2']['m3']";
eval('$'. $mVN . ' = "new value";');
print_r($mA);
?>