作者kerash (烽火連天依山盡)
看板PHP
標題Re: [請益] 兩陣列 如何join
時間Fri Mar 16 18:19:46 2012
※ 引述《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