作者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
1F:推 sk1765:这样做就是两层foreach了阿 如果 $arr1 $arr2各是1000笔 03/16 19:18
2F:→ sk1765:资料的话 那要跑1000X1000 才能组合 这样达不到网页30秒的 03/16 19:20
3F:→ sk1765:限制 我现在是照前一篇讨论的 先把其中一个array的key 03/16 19:21
4F:→ sk1765:从原来的数字改成id的值当key 然後在两个array merge 这样 03/16 19:22
5F:→ sk1765:只跑两次 foreach 各1000次 共2000次 03/16 19:23
6F:→ sk1765:不过还是谢谢你帮我想程式 感谢 03/16 19:24
7F:→ MOONRAKER:对嘛 你这样做就是O(n1+n2) 很难更好了 03/16 19:35
8F:推 benck:php5限制array_merge仅可传入array,要typecast一下 03/20 10:16
9F:→ kerash:谢谢楼上@@ 没注意 03/20 11:50
10F:→ kerash:如果确定两个传入的都是 array 应该就不用改 type 了吧? 03/20 11:52