PHP 板


LINE

看板 PHP  RSS
各位大大好~ 小弟不才,最近接到一个任务,就是写出二维以上之两阵列比对的class或function, 而两阵列的各有指定key=>value值,假如一个阵列是现有的阵列资料, 另一阵列来自json_decode产生出的阵列。 --------------------------------------------------------------------------- 程式需求叙述: 需求是要以"现有阵列资料"为主, 第一、若唯一识别值存在於"现有阵列资料"中, 且该笔相对应的阵列资料於"json_decode阵列"中有更新值, 则进行"现有阵列资料"更新" (※仅限於"现有阵列资料"原有的key相对应的value值做更新, 而"json_decode阵列"多余的key=>value值则忽略); 第二、若唯一识别值不存在於"现有阵列资料"中, 则新增该笔"唯一识别值阵列"到"现有阵列资料"中。 目标:在最终回传一个需要更新的完整阵列 如下所示: ---------------------------现有的阵列资料-------------------------- Array ( [330] => Array ( [id] => 330 [state] => 0 [date] => 2014-01-08 [time] => Array ( [time1] => 1400 [time2] => 1500 [time3] => 1600 ) ) [331] => Array ( [id] => 331 [state] => 1 [date] => 2014-01-08 [time] => Array ( [time1] => 0800 [time2] => 0830 [time3] => 0840 ) ) ) ------------------------------------------------------------------- ------------------------来自json_decode阵列------------------------ Array ( [330] => Array ( [id] => 330 [state] => 2 [date] => 2014-01-08 [time] => Array ( [time1] => 1400 [time2] => 1430 [time3] => 1500 ) [creater] => 8951 ) [333] => Array ( [id] => 333 [state] => 1 [date] => 2014-01-08 [time] => Array ( [time1] => 1600 [time2] => 1630 [time3] => 1700 ) ) ) ------------------------------------------------------------------- --------------------------最终目标产生阵列------------------------- Array ( [330] => Array ( [id] => 330 [state] => 2 [date] => 2014-01-08 [time] => Array ( [time1] => 1400 [time2] => 1430 [time3] => 1500 ) ) [333] => Array ( [id] => 333 [state] => 1 [date] => 2014-01-08 [time] => Array ( [time1] => 1600 [time2] => 1630 [time3] => 1700 ) ) ) ------------------------------------------------------------------- 红色字体为json_decode阵列资料中有该key=>value,但现有阵列资料没有 绿色字体为欲更新的部分。 ------------------------------------------------------------------- 请问各位大大们有什麽建议的方法吗? 小弟目前是想以递归方式来做, 但遇到若有更多层阵列的话,不知道该如何指定到正确的阵列位址来进行资料更新, 请各位大大不吝给予小弟赐教,谢谢~ --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.109.6.65
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/PHP/M.1396857871.A.47F.html ※ 编辑: NdhuOD (140.109.6.65), 04/07/2014 16:15:05
1F:推 bobju:递归? 什麽意思? 这应该用个 foreach loop 就行了 04/07 16:51
2F:→ bobju:另外 更多层阵列的层数有没有规则可循? 若没有的话虽然也可 04/07 16:52
3F:→ bobju:以处理 就看程式技巧了 php处理这种东西正合适 04/07 16:53
4F:→ NdhuOD:是递回才对~上面笔误~bobju大大说的foreach loop我有用到, 04/07 17:30
5F:→ NdhuOD:但又考虑要对应到key值,就比较难处理,想开发不仅只适用 04/07 17:31
6F:→ NdhuOD:2~3层的阵列,希望能够是一体适用,多层都可以利用此class 04/07 17:32
7F:→ NdhuOD:还请大大指点迷津,谢谢您~ 04/07 17:32
8F:推 bobju:一般是可以用[reference]的机制来为树当中的节点做定位 04/07 17:38
9F:→ bobju:若能先定义出具体资料结构, 用它来解析会比较容易解说 04/07 17:39
10F:→ bobju:这篇文章当中的范例就只能是个 [key=>array] 的 node list, 04/07 17:40
11F:→ bobju:看不出你会如何用它来描述树状结构 04/07 17:41
12F:→ NdhuOD:小弟希望是能够使用树状结构,以每笔资料的PK作为根节点, 04/07 17:56
13F:→ NdhuOD:但是不知道该如何使用tree的reference方式,小弟用笨方法, 04/07 17:57
14F:→ NdhuOD:每进一层就用key=>value方式来取索引和值,但第二层之後就 04/07 17:58
15F:→ NdhuOD:不知道如何找到reference的根节点,只知道目前的key=>value 04/07 17:59
16F:→ NdhuOD:330、331、333那些表示的就是PK,也就是小弟想拿来做根节点 04/07 17:59
17F:→ NdhuOD:请大大指导小弟>"<,感谢您~ 04/07 18:00
18F:推 bobju:假设 node 用 $node 表示, &$node 就是其reference 04/07 18:02
19F:→ bobju:你可以在做 recursive traversal 时, 把每组 $key => $node 04/07 18:03
20F:→ bobju:的关系改为 $key => &$node_ref, 而 $node_ref 则复制到另 04/07 18:05
21F:→ bobju:一个全域范围的 array 里, 其内容即为$node的内容 04/07 18:05
22F:→ bobju:好像很复杂 @_@ 04/07 18:06
23F:→ bobju:总之 一定能处理就对了 技巧也不限於此 或许你玩一玩就玩出 04/07 18:09
24F:→ bobju:心得来了 04/07 18:09
25F:→ NdhuOD:谢谢大大~让小弟思考一下,不懂的地方再请教您~谢谢>"< 04/07 18:09
26F:推 sunnyvisit:其实也可以考虑先定义出一组需要的key 之後foreach去一 04/07 18:12
27F:→ sunnyvisit:组你要的格式资料 04/07 18:12
28F:推 sunnyvisit:是我的话,就从你给我的资料中拿出我要的资料,再组成 04/07 18:14
29F:→ sunnyvisit:我想要的样子。这样可以不用去判断是否有更新。 04/07 18:14







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP