微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP:使用变量作为键设置嵌套数组的值

可以说我有这样的代码

    $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]更容易使用

Demo

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐