5
大佬们 问个 PHP 动态修改多维数组的问题
source link: https://www.v2ex.com/t/796542
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
大佬们 问个 PHP 动态修改多维数组的问题
$a=[1,2,3,4]
$b=[
1=>[
2=>[
3=>[
4=>[]
]
]
]
]
我如何通过 a,b 给 4 里面加一个值 5,a 的个数可能会变 但是不会超过 b 不考虑 a 里面的超过了 b,反正就是动态的那种
15 条回复 • 2021-08-19 16:51:36 +08:00
qwertyzzz 1 天前
JKeita 1 天前
$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;
这样?
$b=[
1=>[
2=>[
3=>[
4=>[]
]
]
]
];
$arr = &$b;
foreach($a as $v){
$arr = &$arr[$v];
}
$arr[$v+1]=[];
echo json_encode($b);
die;
这样?
jhdxr 1 天前
简而言之,做不到。
你无法做到修改了一个数组后自动修改另外一个数组的值或结构(引用除外,但引用本质上两个数组或者数组的一部分得是相同的,不符合你这个场景)
但也许你可以写一个函数,输入是 a,输出是你想要的 b
你无法做到修改了一个数组后自动修改另外一个数组的值或结构(引用除外,但引用本质上两个数组或者数组的一部分得是相同的,不符合你这个场景)
但也许你可以写一个函数,输入是 a,输出是你想要的 b
qwertyzzz 1 天前
@JKeita 数组访问 不是中括号嘛 二维数组 不是 2 个中括号嘛 现在我不清楚是几维 所以维度是动态的 那么我$b 后面跟的[]就是多个 假设键值都在$a=[1,2,3]这个数组里 这边 1 2 3 是键 那我就是想修改$b[1][2][3],如果$a=[1,2,3,4].那就是修改$b[1][2][3][4] 就这个意思吧 不晓得能不能
AoEiuV020 1 天前
@qwertyzzz 好像有点懂了,现在已知$a=[1,2,3,4];
想通过 a 得到定位到数组 b 上$b[1][2][3][4]这个节点上,
如果 a 是[9,5,2,7]就表示想读写 b[9][5][2][7], 是这样的吧,
你这里是把数组当链表用了,那么读取也得按链表来了,简单说就是循环,
那这 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);
想通过 a 得到定位到数组 b 上$b[1][2][3][4]这个节点上,
如果 a 是[9,5,2,7]就表示想读写 b[9][5][2][7], 是这样的吧,
你这里是把数组当链表用了,那么读取也得按链表来了,简单说就是循环,
那这 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);
wispx 1 天前
https://implode.io/y9evv9
思路:先按键名将数组倒序,利用 PHP 的 array_reduce 函数,每次回调都可以拿到上次回调回调所返回的值,每次回调利用上次的值创建新的数组,说人话就是每次回调都将上次的值于本次回调的值合并成一个数组并返回供下一个回调处理(好像有点拗口
思路:先按键名将数组倒序,利用 PHP 的 array_reduce 函数,每次回调都可以拿到上次回调回调所返回的值,每次回调利用上次的值创建新的数组,说人话就是每次回调都将上次的值于本次回调的值合并成一个数组并返回供下一个回调处理(好像有点拗口
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK