完全外连接PHP中的两个关联数组

时间:2013-10-20 10:59:10

标签: php arrays

我有两个php数组,如下所示。现在我想在这两个数组上得到一个完整的外连接(就像在SQL中)。 “Id”可以被视为唯一密钥。实现这一目标的简单方法是什么?

数组1(旧数据):

array(
[0]=>array("Id"=>101, "Name"=>"Bob",....),
[1]=>array("Id"=>102, "Name"=>"Scott",....),
[2]=>array("Id"=>103, "Name"=>"Philips",....),
[3]=>array("Id"=>104, "Name"=>"Marker",....)
)

数组2(新数据):

array(
[0]=>array("Id"=>102, "Name"=>"Scott",....),
[1]=>array("Id"=>103, "Name"=>"Philips",....),
[2]=>array("Id"=>104, "Name"=>"Mark",....),
[3]=>array("Id"=>105, "Name"=>"Nix",....)
)

结果数组:

`阵列(

  [0]=>array("Status"=>"d", "Id"=>101, "Name"=>"Bob",....), 
  [1]=>array("Status"=>"s", "Id"=>102, "Name"=>"Scott",....), 
  [2]=>array("Status"=>"s", "Id"=>103, "Name"=>"Philips",....),
  [3]=>array("Status"=>"c", "Id"=>104, "Name"=>"Mark",....),
  [4]=>array("Status"=>"n", "Id"=>105, "Name"=>"Nix",....)

)`

其中status - >

`“d” - 删除

“s” - 相同,记录值没有变化

“c” - 更改任何记录值

“n” - 新纪录`

1 个答案:

答案 0 :(得分:0)

您可以通过将“Id”字段作为键

来重新索引两个数组
     array(
     [101]=>array("Id"=>101, "Name"=>"Bob",....),
     [102]=>array("Id"=>102, "Name"=>"Scott",....),
     [103]=>array("Id"=>103, "Name"=>"Philips",....),
     [104]=>array("Id"=>104, "Name"=>"Marker",....)
     )

然后在第一个中为每个条目循环第二个,状态可以通过状态's'和'c'的一些数组比较函数,'d'的array_key_exists轻松决定。的结果 array_diff(数组2,数组1)应检索状态为“n”

的条目

这样:

     $result = Array();

     foreach(array1 as $k1 => $v1){

       if(!array_key_exists($k1, $array2)){
             $status = 'd';
       }else{
             if(are_the_same($v1, $array2[$k1])) $status = 's';
             else $status = 'c';
       }

       $result[]=array("Status"=>$status, "Id"=>$k1, "Name"=>$v1['Name'],....)

     }

然后你可以使用数组merge y array_diff的组合来填充'd'状态。 我想你可以为此编写自己的代码; - )