我有两个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” - 新纪录`
答案 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'状态。 我想你可以为此编写自己的代码; - )