目前我创建了以下嵌套数组:
$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