PHP-向数组动态添加维度
我有一个:PHP-向数组动态添加维度,php,arrays,Php,Arrays,我有一个: $value = "val"; 我还有一个数组: $keys = ['key1', 'key2', 'key3'...] 该数组中的键是动态生成的,可以从2个条目到10个或更多条目 我的目标是: $array['key1']['key2']['key3']... = $value; 我该怎么做 谢谢我不认为有内置的功能,但是你可以通过简单的foreach和引用来实现 $newArray = []; $keys = ['key1', 'key2', 'key3']; $refer
$value = "val";
我还有一个数组:
$keys = ['key1', 'key2', 'key3'...]
该数组中的键是动态生成的,可以从2个条目到10个或更多条目
我的目标是:
$array['key1']['key2']['key3']... = $value;
我该怎么做
谢谢我不认为有内置的功能,但是你可以通过简单的
foreach
和引用来实现
$newArray = [];
$keys = ['key1', 'key2', 'key3'];
$reference =& $newArray;
foreach ($keys as $key) {
$reference[$key] = [];
$reference =& $reference[$key];
}
unset($reference);
var_dump($newArray);
最简单、最不混乱的方法(即不使用引用)是使用递归函数:
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, []);
它起作用了
它的工作原理非常简单:
:如果还有一个要添加的键如果($keys){
从数组中移动第一个元素$key=array\u shift($keys);
:将索引添加到$target[$key]=addArrayLevels($keys,[]);
,并使用$target
(删除第一个值后)再次调用同一函数。这些递归调用将继续进行,直到$keys
为空,并且该函数仅返回一个空数组$keys
- 递归在一开始的时候可能会很棘手,特别是在复杂的函数中,在你没有编写的代码中,但是要很好地记录它,你应该会很好
- 它更灵活(您可以使用
作为一种默认/最终赋值变量,不费吹灰之力(如果我找到时间,将在下面添加示例)$target
- 不需要处理
@JeremyBelolo:请阅读我的“专业人士”列表中的链接答案以获得解释,但请相信我的话:尽可能避免引用,在这里你真的可以避免引用
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);