使用另一个包含路径的数组设置数组元素


Set array element using another array containing path

我有一个像

这样的数组
$arr = [
  'foo' => [
    'bar' => [
      1
    ],
    'baz' => [
      1
    ]
  ]
]

和另一个

$path = ['foo', 'bar', 0];

我需要用$path来修改$arr的值。我需要非常简单的解决方案,我尝试了像

这样的东西
$arr...$path = 2;
$arr[...$path] = 2;

修改后的$arr看起来应该是

$arr = [
  'foo' => [
    'bar' => [
      2
    ],
    'baz' => [
      1
    ]
  ]
]

但是我得到了错误。我并不总是知道数组有多少层

您的路径不正确-对于$arr[$path] = 2;,您需要

$path = ['foo', 'bar', 0];
$p = &$arr;
foreach($path as $step) 
   $p = &$p[$step];
echo $p . "'n";
$p = 2;
print_r($arr);

或与

$path = ['foo', 'bar'];
$p = &$arr;
foreach($path as $step) 
   $p = &$p[$step];
echo $p[0] . "'n";
$p[0] = 2;
print_r($arr);

试试这个:

$link =& $arr;
foreach ($path AS $p) 
{
    $link =& $link[$p];
}
$link[0]++;
$arr[$path[0]][$path[1]] ='XXX'