尝试检索嵌套键数组值,给定未知数量的提供键到 PHP 函数

Attempt to retrieve nested key array value given unkown amount of supplied keys into PHP function

我想提供一个带有一组键(未知数量)和一个值的函数,然后设置相应的嵌套数组值(使用这些键和值)。我知道如何进行检索,而不是分配。对于检索,我这样做:

function test($keys, $value){
    $arr = ["key1" => ["key2" => true], "key3" => true];

    $nestedArrayValue = $arr;
    foreach($keys as $key){
        $nestedArrayValue = $arr[$key];
    }

    return $nestedArrayValue;
}

但是在赋值时,$nestedArrayValue是一个副本,所以它实际上不会改变$arr。同样,如果我要通过引用传递 $nestedArrayValue = &$arr,foreach 每次都会覆盖整个 $arr。例如:

function test($keys, $value){
    $arr = ["key1" => ["key2" => true], "key3" => true];

    $nestedArrayValue = &$arr;
    foreach($keys as $key){
        $nestedArrayValue = $arr[$key];
    }

    $nestedArrayValue = $value;

    var_dump($arr);
}

test(["key1", "key2"], "test value");
//OUTPUT:
string(10) "test value" 

整个 $arr 被覆盖(它应该)。我的问题是:如何在给定未知数量的键(作为数组)的情况下直接分配给 $arr?可能吗?

更新:

这是我正在尝试做的伪代码示例:

// If this is supplied into function:
["key1","key2"]

// Then this is attempted to be returned:
$arr["key1"]["key2"];

我想出了怎么做 ^ 那个,但我似乎无法弄清楚如何做到这一点:

// If this is supplied for keys:
["key1","key2"] 

// And if this is supplied as value:
"test value"

// Then it should attempt to set:
$arr["key1"]["key2"] = "test value"

这可能吗?

您将 $nestedArrayValue 引用设置为数组,并在循环中实际将整个数组替换为值 $arr[$key]。有必要更改对下一个键的引用:

$nestedArrayValue = &$arr;
foreach($keys as $key){
    // $nestedArrayValue = $arr[$key];
    $nestedArrayValue = &$nestedArrayValue[$key];
}

$nestedArrayValue = $value;

检查密钥是否存在也很好:

$nestedArrayValue = &$arr;
$found = true;
foreach($keys as $key){
    if (array_key_exists($key, $nestedArrayValue)) {
        $nestedArrayValue = &$nestedArrayValue[$key];
    } else {
        $found = false;
        break;
    }
}

if ($found) {
    $nestedArrayValue = $value;
}