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

时间:2015-07-11 13:14:21

标签: php arrays multidimensional-array nested

让我说我有这样的代码:

Caterogy

当然这是有效的,但我想要的是使用变量来更新这个'c'键,如下所示:

    $array = [
        'a'=> [
            'b' => [
                'c'=>'some value',
            ],
        ],
    ];

    $array['a']['b']['c'] = 'new value';

但是键正在以字符串形式处理,这就是我得到的:

$keys = '[a][b][c]';
$array{$keys} = 'new value';

所以我希望得到一些帮助,告诉我在不使用eval()的情况下完成这项工作的正确方法。

顺便说一句,可以有任意数量的数组嵌套,所以这样的东西不是一个好的答案:

$array['[a][b][c]'] = 'new value';

3 个答案:

答案 0 :(得分:2)

这不是定义密钥的最佳方式,但是:

$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);

如果你必须在这样的字符串中定义一系列键,那么只使用一个可以展开的简单分隔符而不需要修剪以构建一个单独的键数组,这样更简单,所以像a.b.c这样简单的东西比[a][b][c]

更容易使用

Demo

答案 1 :(得分:1)

最简单的方法是使用this library

Arr::handleNestedElement($array, 'a.b.c', 'new_value');

或者,如果您将键作为数组,则可以使用以下形式:

Arr::handleNestedElement($array, ['a', 'b', 'c'], 'new_value');

答案 2 :(得分:0)

嗨,你可以通过一系列键来做到这一点:

这是你的数组结构:

$array = array(
    'a'=> array(
        'b' => array(
            'c'=>'some value',
        ),
    ),
);

这是使用动态密钥从数组中获取值的PHP代码:

$result = $array; //Init an result array by the content of $array

$keys = array('a','b','c'); //Make an array of keys

//For loop to get result by keys
for($i=0;$i<count($keys);$i++){
    $result = $result[$keys[$i]];
}

echo $result; // $result = 'new value'

我希望答案可以帮助您,在此处找到您工作代码的PHPFiddle