0

我有两个 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",....)

)`

其中状态-->

`"d" - 删除

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

“c” - 任何记录值的变化

“n” - 新记录`

4

1 回答 1

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”,array_key_exists 用于“d”。array_diff (array 2, array 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'],....)

     }

那么您可以使用数组合并 y array_diff 的组合来填充“d”状态。我认为您可以为此编写自己的代码;-)

于 2013-10-20T11:42:32.907 回答