使用动态键将值分配给关联数组

时间:2013-01-09 10:57:43

标签: php

我将$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本身可能是一个数组。某种程度来限制array_replace_recursive可以达到的深度?或者其他一些方式?

3 个答案:

答案 0 :(得分:1)

我做了类似的事情:

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

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

答案 1 :(得分:0)

我认为这是不可能的,因为数组是一个数据结构,你不能把代码或循环放在其中。让我谷歌我会得到一些解决方案后更新你:)

答案 2 :(得分:0)

我终于开始工作了。感谢@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);