0

我有$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 可以去的深度?或者其他方式?

4

3 回答 3

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

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

于 2013-01-09T11:27:46.643 回答
0

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

于 2013-01-09T12:00:30.570 回答
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);
于 2013-01-09T12:16:32.540 回答