[爆卦]php foreach二維陣列是什麼?優點缺點精華區懶人包

為什麼這篇php foreach二維陣列鄉民發文收入到精華區:因為在php foreach二維陣列這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者NdhuOD (OD)看板PHP標題[請益] 請教php多層陣列比對並更新時間Mon Apr ...


各位大大好~

小弟不才,最近接到一個任務,就是寫出二維以上之兩陣列比對的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://www.ptt.cc/bbs/PHP/M.1396857871.A.47F.html
※ 編輯: NdhuOD (140.109.6.65), 04/07/2014 16:15:05
bobju:遞歸? 什麼意思? 這應該用個 foreach loop 就行了 04/07 16:51
bobju:另外 更多層陣列的層數有沒有規則可循? 若沒有的話雖然也可 04/07 16:52
bobju:以處理 就看程式技巧了 php處理這種東西正合適 04/07 16:53
NdhuOD:是遞迴才對~上面筆誤~bobju大大說的foreach loop我有用到, 04/07 17:30
NdhuOD:但又考慮要對應到key值,就比較難處理,想開發不僅只適用 04/07 17:31
NdhuOD:2~3層的陣列,希望能夠是一體適用,多層都可以利用此class 04/07 17:32
NdhuOD:還請大大指點迷津,謝謝您~ 04/07 17:32
bobju:一般是可以用[reference]的機制來為樹當中的節點做定位 04/07 17:38
bobju:若能先定義出具體資料結構, 用它來解析會比較容易解說 04/07 17:39
bobju:這篇文章當中的範例就只能是個 [key=>array] 的 node list, 04/07 17:40
bobju:看不出你會如何用它來描述樹狀結構 04/07 17:41
NdhuOD:小弟希望是能夠使用樹狀結構,以每筆資料的PK作為根節點, 04/07 17:56
NdhuOD:但是不知道該如何使用tree的reference方式,小弟用笨方法, 04/07 17:57
NdhuOD:每進一層就用key=>value方式來取索引和值,但第二層之後就 04/07 17:58
NdhuOD:不知道如何找到reference的根節點,只知道目前的key=>value 04/07 17:59
NdhuOD:330、331、333那些表示的就是PK,也就是小弟想拿來做根節點 04/07 17:59
NdhuOD:請大大指導小弟>"<,感謝您~ 04/07 18:00
bobju:假設 node 用 $node 表示, &$node 就是其reference 04/07 18:02
bobju:你可以在做 recursive traversal 時, 把每組 $key => $node 04/07 18:03
bobju:的關係改為 $key => &$node_ref, 而 $node_ref 則複製到另 04/07 18:05
bobju:一個全域範圍的 array 裏, 其內容即為$node的內容 04/07 18:05
bobju:好像很複雜 @_@ 04/07 18:06
bobju:總之 一定能處理就對了 技巧也不限於此 或許你玩一玩就玩出 04/07 18:09
bobju:心得來了 04/07 18:09
NdhuOD:謝謝大大~讓小弟思考一下,不懂的地方再請教您~謝謝>"< 04/07 18:09
sunnyvisit:其實也可以考慮先定義出一組需要的key 之後foreach去一 04/07 18:12
sunnyvisit:組你要的格式資料 04/07 18:12
sunnyvisit:是我的話,就從你給我的資料中拿出我要的資料,再組成 04/07 18:14
sunnyvisit:我想要的樣子。這樣可以不用去判斷是否有更新。 04/07 18:14

你可能也想看看

搜尋相關網站