【问题标题】:Modify value of a deep key in an associative array [duplicate]修改关联数组中深度键的值[重复]
【发布时间】:2017-06-17 17:23:51
【问题描述】:

假设我们有一个简单的$array,如下所示。

$array = array(
    'a' => array(
        'b' => array(
            'c' => 'd'
        ),
        'e' => 'f'
    ),
    'g' => 'h'
);

给定一个任意数组$keys = array('a', 'b', 'c')和一个值$value = 'i',我想将$array['a']['b']['c']的值更改为i

为简单起见,我们假设$keys 的元素都是有效的,即对于任何正数j$keys[j] 存在并且是$keys[j - 1] 的子元素。

我想出了一个解决方案,方法是传递对数组的引用并循环键,但我的实现似乎有点难看。有什么直接的方法吗?

【问题讨论】:

    标签: php arrays


    【解决方案1】:
    // current key index (starting at 0)
    $i = 0;
    // current array (starting with the outermost)
    $t = &$array;
    
    // continue until keys are exhausted
    while ($i < count($keys) - 1) {
    
        // update array pointer based on current key
        $t = &$t[$keys[$i++]];
    }
    
    // update value at last key
    $t[$keys[$i]] = $value;
    

    http://sandbox.onlinephpfunctions.com/code/0598f00ab719c005a0560c18f91ab00154ba9453

    【讨论】:

    • 不应该用$t = &amp;$array 代替吗?
    • 是的,你是对的 :) 我只是在测试它,你帮助修复了我的错误。
    • 谢谢丹娜。您的最新版本比我想出的要好得多!
    猜你喜欢
    • 2013-09-13
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2023-03-15
    相关资源
    最近更新 更多