看板 PHP 關於我們 聯絡資訊
※ 引述《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
sk1765:這樣做就是兩層foreach了阿 如果 $arr1 $arr2各是1000筆 03/16 19:18
sk1765:資料的話 那要跑1000X1000 才能組合 這樣達不到網頁30秒的 03/16 19:20
sk1765:限制 我現在是照前一篇討論的 先把其中一個array的key 03/16 19:21
sk1765:從原來的數字改成id的值當key 然後在兩個array merge 這樣 03/16 19:22
sk1765:只跑兩次 foreach 各1000次 共2000次 03/16 19:23
sk1765:不過還是謝謝你幫我想程式 感謝 03/16 19:24
MOONRAKER:對嘛 你這樣做就是O(n1+n2) 很難更好了 03/16 19:35
benck:php5限制array_merge僅可傳入array,要typecast一下 03/20 10:16
kerash:謝謝樓上@@ 沒注意 03/20 11:50
kerash:如果確定兩個傳入的都是 array 應該就不用改 type 了吧? 03/20 11:52