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/m.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燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP