0

以下に示すように、2つのphp配列があります。ここで、これら 2 つの配列に対して (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",....)
     )

次に、最初のエントリごとに2番目を循環させます。ステータスは、ステータス「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'],....)

     }

次に、配列マージとarray_diffの組み合わせを使用して、「d」ステータスのものを埋めることができます。これについては、独自のコードを記述できると思います ;-)

于 2013-10-20T11:42:32.907 に答える