我将$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可以达到的深度?或者其他一些方式?
答案 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);