我有一个:
$value = "val";
我也有一个数组:
$keys = ['key1', 'key2', 'key3'...]
该数组中的键是动态生成的,可以包含2到10个或更多条目。
我的目标是:
$array['key1']['key2']['key3']... = $value;
我该怎么做?
由于
答案 0 :(得分:3)
我认为没有内置函数,但您可以使用简单的foreach
和引用来实现。
$newArray = [];
$keys = ['key1', 'key2', 'key3'];
$reference =& $newArray;
foreach ($keys as $key) {
$reference[$key] = [];
$reference =& $reference[$key];
}
unset($reference);
var_dump($newArray);
答案 1 :(得分:3)
最简单,最简单的方法(即不使用引用)将使用递归函数:
function addArrayLevels(array $keys, array $target)
{
if ($keys) {
$key = array_shift($keys);
$target[$key] = addArrayLevels($keys, []);
}
return $target;
}
//usage
$keys = range(1, 10);
$subArrays = addARrayLevels($keys, []);
的工作原理非常简单:
if ($keys) {
:如果还有一个要添加的密钥$key = array_shift($keys);
从数组中移出第一个元素$target[$key] = addArrayLevels($keys, []);
:将索引添加到$target
,然后使用$keys
再次调用相同的函数(删除第一个值后)。这些递归调用将一直持续到$keys
为空,并且函数只返回一个空数组缺点:
专业人士:
$target
作为一种默认/最终赋值变量,只需花费很少的精力(如果我找到时间,将添加以下示例)使用上述函数调整以在“最低”级别指定值的示例:
function addArrayLevels(array $keys, $value)
{
$return = [];
$key = array_shift($keys);
if ($keys) {
$return[$key] = addArrayLevels($keys, $value);
} else {
$return[$key] = $value;
}
return $return;
}
$keys = range(1, 10);
$subArrays = addARrayLevels($keys, 'innerValue');
var_dump($subArrays);