$a=[1,2,3,4]

$b=[
1=>[]
2=>[]
3=>[]
4=>[]
]

我如何通过 a,b 给 4 里面加一个值 5,a 的个数可能会变 但是不会超过 b 不考虑 a 里面的超过了 b,反正就是动态的那种

嗯。。。没看明白,要不格式化一下,再把添加之后的数组写出来看看,

你这是从数据库里读出来要弄树形结构吧。分销用?

再说的详细点看
第一段我就没有看明白要干什么
“我如何通过 a,b 给 4 里面加一个值 5,”

对差不多 不过不是分销 就多层
额 就是 $a=[1,2,3] $b'1'['3']........ 不晓得能明白不

hash 表?

看不懂题目说什么,a 和 b 有啥关系。

$a=[1,2,3,4];

$b=[
1=>[]
2=>[]
3=>[]
4=>[]
];

$arr = &$b;
foreach($a as $v){
$arr = &$arr[$v];
}
$arr[$v+1]=[];
echo json_encode($b);
die;
这样?

简而言之,做不到。

你无法做到修改了一个数组后自动修改另外一个数组的值或结构(引用除外,但引用本质上两个数组或者数组的一部分得是相同的,不符合你这个场景)

但也许你可以写一个函数,输入是 a,输出是你想要的 b

数组访问 不是中括号嘛 二维数组 不是 2 个中括号嘛 现在我不清楚是几维 所以维度是动态的 那么我$b 后面跟的[]就是多个 假设键值都在$a=[1,2,3]这个数组里 这边 1 2 3 是键 那我就是想修改$b[1][2][3],如果$a=[1,2,3,4].那就是修改$b13 就这个意思吧 不晓得能不能

所以使用引用啊

因为 a 和 b 层级对应,那就是遍历 a 获取 b 下个层级引用。

好像有点懂了,现在已知$a=[1,2,3,4];
想通过 a 得到定位到数组 b 上$b13这个节点上,
如果 a 是[9,5,2,7]就表示想读写 b92, 是这样的吧,

你这里是把数组当链表用了,那么读取也得按链表来了,简单说就是循环,
那这 7 楼没毛病啊,

<?php
$a=[1,2,3,4];
$b=[ 1=>[ 2=>[ 3=>[ 4=>[] ] ] ] ];

$ret = &$b;
foreach($a as $v){
$ret = &$ret[$v];
}

$ret[5] = "hello";
print_r($b);

3v4l.org/TBLt5
是这样吗?

implode.io/y9evv9

思路:先按键名将数组倒序,利用 PHP 的 array_reduce 函数,每次回调都可以拿到上次回调回调所返回的值,每次回调利用上次的值创建新的数组,说人话就是每次回调都将上次的值于本次回调的值合并成一个数组并返回供下一个回调处理(好像有点拗口

取地址 修改