php - 优化多维数组创建
问题描述
我在一个数组中有一个数组键和嵌套级别的列表,例如:
$keys[0] = 'first';
$keys[1] = 'second';
$keys[2] = 'third';
如何将其转换为以下格式的多维数组:
$array['first']['second']['third'] = 'value';
我尝试了几种不同的变体,但都没有奏效,并且键覆盖了自己。最简单的方法是计算键的数量并手动覆盖每个场景,但这几乎没有优化并且不会动态增长。
$keyLen = count($keys);
if ($keyLen == 1) {
$array[$keys[0]] = 'value;
} elseif ($keyLen == 2) {
$array[$keys[0]][$keys[1]] = 'value;
} elseif ($keyLen == 3) {
$array[$keys[0]][$keys[1]][$keys[2]] = 'value';
} ...
需要注意的是,该值并不重要,它是数组键的嵌套,我无法更改初始数组格式。
解决方案
您可以向后遍历输入数组并在执行过程中包装先前的结果:
$nested = 'value';
for (end($keys); key($keys)!==null; prev($keys)){
$nested = [current($keys) => $nested];
}
最后$nested
将具有所需的结构。
推荐阅读
- jquery - 如何使用 Ajax 调用 MVC4 传递两个字符串数组
- git - 将分离的 HEAD 推送到新标签
- django - 如果模型分配了lookup_fields,如何使用drf-extension(Django Rest Framework)
- angular - 谷歌字体导入不适用于 Angular Material 生产版本
- java - 构建图形数组
- azure - 无法通过 Ngnix 使用 SSL 实现与 redis 容器的安全连接
- python - 在python中获取最短路径时出现Dijkstra算法错误
- javascript - 在 Vuejs 中使用 Google Map 监听地图事件
- firebase - 当数据更改时,为什么我的 firestore 函数不会在本地模拟器中触发?
- nativescript - Nativescript 数据绑定多行 TextView