Re: [請益] 兩陣列 如何join

看板PHP作者 (烽火連天依山盡)時間13年前 (2012/03/16 18:19), 編輯推噓2(208)
留言10則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《sk1765 (愛是一種忍耐)》之銘言: : 請問有函數有這樣join的功能嗎 或是程式要怎麼寫比較簡潔 如果你的條件是 Array A 跟 Array B 以 id 做為合併的 key 而 Array A 跟 Array B 的其他 key 不會重複的話 那我是這樣寫的 .. <?php function array_2D_merge($arr1,$arr2,$key) { $retArr = array(); foreach($arr1 as $bemerge) { $keyval = $bemerge[$key]; foreach($arr2 as $search) { if($search[$key]==$keyval) { $retArr[] = array_merge($search,$bemerge); break; } } } return $retArr; } ?> $arr1 , $arr2 就是你兩個 array $key 是你兩個 array 都會有,用來合併用的 key (這邊是 id) 流程就不說明了 .. input : <?php $a = array( array("id"=>"001","msg"=>"aaa"), array("id"=>"002","msg"=>"bbb"), array("id"=>"003","msg"=>"ccc") ); $b = array( array("id"=>"001","name"=>"qac"), array("id"=>"002","name"=>"swv"), array("id"=>"003","name"=>"edbv") ); ?> print_r(array_2D_merge($a,$b,"id")); output : Array ( [0] => Array ( [id] => 001 [name] => qac [msg] => aaa ) [1] => Array ( [id] => 002 [name] => swv [msg] => bbb ) [2] => Array ( [id] => 003 [name] => edbv [msg] => ccc ) ) 應該有符合你的要求吧Orz 但因為主要還是用 array_merge 所以如果兩個陣列有 key 相同的狀況可能會發生不可預期的結果 (其實就是後面的陣列值會覆蓋上去這樣XD) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.34.30.6

03/16 19:18, , 1F
這樣做就是兩層foreach了阿 如果 $arr1 $arr2各是1000筆
03/16 19:18, 1F

03/16 19:20, , 2F
資料的話 那要跑1000X1000 才能組合 這樣達不到網頁30秒的
03/16 19:20, 2F

03/16 19:21, , 3F
限制 我現在是照前一篇討論的 先把其中一個array的key
03/16 19:21, 3F

03/16 19:22, , 4F
從原來的數字改成id的值當key 然後在兩個array merge 這樣
03/16 19:22, 4F

03/16 19:23, , 5F
只跑兩次 foreach 各1000次 共2000次
03/16 19:23, 5F

03/16 19:24, , 6F
不過還是謝謝你幫我想程式 感謝
03/16 19:24, 6F

03/16 19:35, , 7F
對嘛 你這樣做就是O(n1+n2) 很難更好了
03/16 19:35, 7F

03/20 10:16, , 8F
php5限制array_merge僅可傳入array,要typecast一下
03/20 10:16, 8F

03/20 11:50, , 9F
謝謝樓上@@ 沒注意
03/20 11:50, 9F

03/20 11:52, , 10F
如果確定兩個傳入的都是 array 應該就不用改 type 了吧?
03/20 11:52, 10F
文章代碼(AID): #1FOnF4nL (PHP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1FOnF4nL (PHP)