大家都知道在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);
?>