5

大佬们 问个 PHP 动态修改多维数组的问题

 2 years ago
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 动态修改多维数组的问题

V2EX  ›  PHP

大佬们 问个 PHP 动态修改多维数组的问题

  qwertyzzz · 1 天前 · 647 次点击
$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

AoEiuV020

AoEiuV020   1 天前

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

buxudashi

buxudashi   1 天前   ❤️ 1

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

justrand

justrand   1 天前

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

qwertyzzz

qwertyzzz   1 天前

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

emeab

emeab   1 天前

hash 表?

JKeita

JKeita   1 天前

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

JKeita

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;
这样?

jhdxr

jhdxr   1 天前

简而言之,做不到。

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

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

qwertyzzz

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] 就这个意思吧 不晓得能不能

JKeita

JKeita   1 天前

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

AoEiuV020

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);

wispx

wispx   1 天前

https://implode.io/y9evv9

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

hejw19970413

hejw19970413   11 小时 22 分钟前

取地址 修改

关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   981 人在线   最高记录 5497   ·  

创意工作者们的社区

World is powered by solitude

VERSION: 3.9.8.5 · 21ms · UTC 20:14 · PVG 04:14 · LAX 13:14 · JFK 16:14
♥ Do have faith in what you're doing.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK