Php 将值指定给具有动态关键点的关联数组

Php 将值指定给具有动态关键点的关联数组,php,Php,我将$options作为一个关联数组,每个值都是混合的(可以是字符串或其他数组)。我在那里不会有任何东西。 $keys是一个数字数组&键的数量在运行时确定 我希望得到与此表达式类似的结果 $options[$keys[0][$keys[1]].[$keys[count($keys)-1]]=$value 例如,如果$keys=array('key1'),我想执行 $options['key1']=$value &如果$keys=array('key1','key2'),我想执行 $options

我将
$options
作为一个关联数组,每个值都是混合的(可以是字符串或其他数组)。我在那里不会有任何东西。
$keys
是一个数字数组&键的数量在运行时确定

我希望得到与此表达式类似的结果
$options[$keys[0][$keys[1]].[$keys[count($keys)-1]]=$value

例如,如果
$keys=array('key1')
,我想执行
$options['key1']=$value
&如果
$keys=array('key1','key2')
,我想执行
$options['key1']['key2']=$value
&诸如此类


array_replace_recursive的问题是$value本身可能是一个数组。如何限制数组替换递归可以达到的深度?或者其他方式?

我做了类似的东西:

$options = array('key1' => array('key2' => array('key3' => 'value')));
$keys = array('key1', 'key2', 'key3');

$search = &$options;
foreach ($keys as $key) {
    $search = &$search[$key];
}
$search = 'changed value';

var_dump($options);

您可以始终创建对下一个键的引用。

我认为这是不可能的,因为数组是一个数据结构,您不能将代码或循环放入其中。让我用谷歌搜索一下,一旦找到解决方案,我会立即更新你:)

我终于让它工作了。感谢@Benjamin Paap。他的回答有助于找到确切的解决办法

$options = array('key1' => array('key2' => array('key3' => 'value')));
$keys = array('key1', 'key2', 'key3');

$length = count($keys);
$search = &$options;
foreach ($keys as $key => $value) {
    // key doesn't exist or value is not an array
    if(!isset($search[$value]) || !is_array($search)) {
        $search = (array) $search;
        $search[$value] = array();
    }

    $search = &$search[$value];

    // last iteration
    if($length - 1 === $key) {
        $search = 'new value';
    }
}
unset($search);
var_dump($options);

似乎存储选项的结构非常复杂-也许您应该重新考虑您的设计。但是
$search
将包含字符串“value”。我想要的是将原始字符串更新为一些新值,以便最终得到
array('key1'=>array('key2'=>array('key3'=>changedvalue'))
是的,我已经让它工作了,请看我的答案。我肯定你的答案,因为正是这个答案让我走上了正确的道路。谢谢