【问题标题】:Changing multidimensional array key value having his keys in another array更改具有他的键在另一个数组中的多维数组键值
【发布时间】:2014-02-24 16:26:32
【问题描述】:

我有两个数组:

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

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

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

如您所见,第二个数组包含第一个数组中的所有键。我想做类似的事情:

$array[$array_2] = 2;

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


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

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

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

【问题讨论】:

  • "如何更改第一个数组的值,其中只有第二个数组包含第一个数组键。" - 不确定您要实现什么。您可以将预期的输出添加到问题中吗?
  • This may inspire you,但不要害怕编写自己的代码,您需要 for 或递归方法。

标签: php arrays multidimensional-array


【解决方案1】:

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

$result =& $array;

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

print_r($array);

【讨论】:

  • 这正是我想要的!谢谢!
【解决方案2】:

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

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

【讨论】:

  • 类似的东西,但更“自动”。还是谢谢。
【解决方案3】:

递归添加键。这行得通 -

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

输出-

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    相关资源
    最近更新 更多