$array = [
'a'=> [
'b' => [
'c'=>'some value',
],
],
];
$array['a']['b']['c'] = 'new value';
当然这是有效的,但我想要的是使用变量来更新这个’c’键,类似的东西:
$keys = '[a][b][c]';
$array{$keys} = 'new value';
但是键正在作为字符串处理,这就是我得到的:
$array['[a][b][c]'] = 'new value';
所以我想要一些帮助,告诉我在不使用eval()的情况下完成这项工作的正确方法.
顺便说一句,可以有任意数量的数组嵌套,所以这样的东西不是一个好的答案:
$key1 = 'a';
$key2 = 'b';
$key3 = 'c';
$array[$key1][$key2][$key3] = 'new value';
解决方法:
这不是定义密钥的最佳方式,但是:
$array = [];
$keys = '[a][b][c]';
$value = 'HELLO WORLD';
$keys = explode('][', trim($keys, '[]'));
$reference = &$array;
foreach ($keys as $key) {
if (!array_key_exists($key, $reference)) {
$reference[$key] = [];
}
$reference = &$reference[$key];
}
$reference = $value;
unset($reference);
var_dump($array);
如果你必须在这样的字符串中定义一系列键,那么使用一个可以展开的简单分隔符更简单,而不需要修剪以构建一个单独的键数组,所以更简单的像abc一样比[a] [b] [c]更容易使用