php - 使用未知数量的嵌套动态更新 php 数组
问题描述
我有一个存储其他嵌套数组的 php 数组。要插入数组的数据以“a_b_c_x”、“a_b_c_y”、“a_b_c_z_p”、“a_b_d”等形式发送。上面提到的四个字符串需要存储在一个数组中:
[
a = [
b = [
c = [
x = [],
y = [],
z = [
p = []
]
],
d = []
]
]
]
数组可以有未知数量的嵌套。我需要解析字符串以搜索现有键并添加新键。我试过类似的东西:
foreach($productConfigurationAdd as $toAdd) {
$addArray = explode('_', $toAdd);
$addTo = &$savedConfigurations;
foreach($addArray as $addElem) {
if(array_search($addElem, $addTo) === false) {
$addTo[$addElem] = [];
$addTo = &$addTo[$addElem];
}
else {
$addTo = &$addTo[$addElem];
}
}
}
它只保存每个块的第一个孩子。请让我知道这里出了什么问题。
编辑:
在上面的代码中,$savedConfigurations
是从数据库中获取的数组,如果添加字符串包含新的配置,则$savedConfigurations
按照问题中的说明进行存储。
解决方案
解决方案非常简单。不需要递归函数。
只需依次创建数组键的引用,最后赋值即可。
function put(&$var, $path, $value) {
foreach(explode('_', $path) as $p) $var =& $var[$p];
$var = $value;
}
使用示例:
$data = [];
put($data, 'a_b_c_x', 'foo');
put($data, 'a_b_c_y', 'bar');
put($data, 'a_b_c_z_p', [123]);
put($data, 'a_b_d', 456.789);
print_r($data);
输出:
Array
(
[a] => Array
(
[b] => Array
(
[c] => Array
(
[x] => foo
[y] => bar
[z] => Array
(
[p] => Array
(
[0] => 123
)
)
)
[d] => 456.789
)
)
)
在https://3v4l.org/Q7SIq上查看它的实际应用
推荐阅读
- python-3.x - 使用pygame时如何在python中处理时间
- spring-cloud-dataflow - 删除scdf旧数据库数据--spring-cloud-dataflow
- laravel - 在 Heroku 上部署后在生产中自动运行 php artisan migrate 是一个好习惯吗?
- python - IP 摄像机 OpenCV 图像重读
- excel - 需要代码行才能点击网站上的按钮
- javascript - 选中复选框时隐藏 iframe 中的元素
- visual-studio - 禁止在调试时编辑代码
- sql - 用逗号分隔字符串
- android - ListBuilder 在同一视图中重复数据的问题
- node.js - 如何将 Redis 桌面管理器连接到数字海洋 ubuntu 服务器