如何创建一个具有动态数量的嵌套数组,该嵌套数组在创建时被分配数据?



目前我创建了以下嵌套数组:

$data = // data from DB
$nested_array = [];
$counter = 0;
foreach ($data as $row) {
$nested_array[$row->a][$row->b][$row->c]['id'] = $counter++;
}

在上面的例子中,我知道我想要使用的嵌套级别的数量,即a,b,c,它是从数据

中选择的一些列但是我想基于我得到的列数组来创建数组。例如,如果我得到:

$columns_selected = ['a', 'b', 'c', 'd', 'e'];

则嵌套数组应该是:

$nested_array[$row->a][$row->b][$row->c][$row->d][$row->e]['id'] = $counter++;

赋值函数中的恶意引用可以工作,例如

function assigner(array &$arr, array $keys, $value = null, bool $onlyFetch = false){
$target = &$arr;
foreach($keys as $key){
$target = &$target[$key];
}
$originalValue = $target;
if(!$onlyFetch){
$target = $value;
}
return $originalValue;
}

现在做
assigner($nested_array, ['a', 'b', 'c', 'd', 'e','id'], "test");

的作用与

相同
$nested_array["a"]["b"]["c"]["d"]["e"]["id"] = "test";

3v4l示例:https://3v4l.org/#live

最新更新