更改多维数组键值,将其键放在另一个数组中

时间:2014-02-24 16:26:33

标签: php arrays multidimensional-array

我有两个数组:

$array = [
    'application' => [
        'foo' => [
            'bar' => 1
        ]
    ]
];

$array_2 = [
    0 => 'application',
    1 => 'foo',
    2 => 'bar'
];

如何更改第一个数组的值,知道第二个数组中的最后一个键是第一个数组中必须更改值的键?

如您所见,第二个数组包含第一个数组中的所有键。我想做点什么:

$array[$array_2] = 2;

......我想我必须创建一个for循环?


例如,如果我想更改bar键值,我必须这样做:

$array['application']['foo']['bar'] = 2;

...但我不知道我必须更改哪个键,我只有一个包含键的数组,列表中的最后一个键是必须更改值的键。

3 个答案:

答案 0 :(得分:1)

您可以构建递归函数,或使用引用:

$result =& $array;

foreach($array_2 as $key) {
    $result =& $result[$key];
}
$result = 2;

print_r($array);

答案 1 :(得分:0)

这样做,虽然不确定你想要达到的目的。

$array[$array_2[0]][$array_2[1]][$array_2[2]] = 2;

答案 2 :(得分:0)

递归添加密钥。这有效 -

function get_keys($arr, &$keys){
    $keys = array_merge($keys,array_keys($arr));
    foreach($arr as $a){
        if(is_array($a)){
            get_keys($a, $keys);
        }
    }
}
$array = Array(
    'application' => Array(
        'foo' => Array(
            'bar' => 1
        )
    )
);
$keys = Array();
get_keys($array, $keys);
var_dump($keys);

OUTPUT -

array
  0 => string 'application' (length=11)
  1 => string 'foo' (length=3)
  2 => string 'bar' (length=3)