0

次のコードを使用して、2 つの配列を差分でマージすることに成功しました。

$a=array("2013-08-22"=>"12","2013-08-25"=>"5","2013-08-27"=>"10");
$b=array("2013-08-22"=>"1","2013-08-23"=>"3","2013-08-25"=>"5","2013-08-27"=>"10","2013-08-29"=>"5");

foreach ($b as $key => $value){
    if(!array_key_exists($key, $a)){
        $a[$key]=0;
    }
}

これは以下を返します:

Array
(
    [2013-08-22] => 0
    [2013-08-23] => 0
    [2013-08-25] => 5
    [2013-08-27] => 10
    [2013-08-29] => 0
    [2013-12-22] => 12
)

アイデアは、aに存在しないbの要素を追加で保持することです

次の配列形式に対して同じことを行うと、問題が発生しています。

$a=array(array("2013-12-22","12"),array("2013-08-25","5"),array("2013-08-27","10"));
$b=array(array("2013-08-22","1"),array("2013-08-23","3"),array("2013-08-25","5"),array("2013-08-27","10"),array("2013-08-29","5"));

私はこれを試しに行きました:

foreach ($b as $key => $value){
    if(!array_key_exists($key, $a)){
        $a[$key]=array($value[0], 0);
    }
}

しかし、返された結果は私が必要とするものとはかけ離れています:

Array
(
    [0] => Array
        (
            [0] => 2013-12-22
            [1] => 12
        )

    [1] => Array
        (
            [0] => 2013-08-25
            [1] => 5
        )

    [2] => Array
        (
            [0] => 2013-08-27
            [1] => 10
        )

    [3] => Array
        (
            [0] => 2013-08-27
            [1] => 0
        )

    [4] => Array
        (
            [0] => 2013-08-29
            [1] => 0
        )

)

キーが日付ではないことは理解していますが、各配列をチェックして二重エントリを取得しないようにするにはどうすればよいですか?

4

1 に答える 1

1
$a = array(
    array("2013-12-22","12"),
    array("2013-08-25","5"),
    array("2013-08-27","10"));
$b = array(
    array("2013-08-22","1"),
    array("2013-08-23","3"),
    array("2013-08-25","5"),
    array("2013-08-27","10"),
    array("2013-08-29","5"));
$exists = array();
foreach ($a as $data) {
    $exists[$data[0]] = 1;
}
foreach ($b as $data) {
    if (array_key_exists($data[0], $exists)) {
        continue;
    }
    $a[] = array($data[0], $data[1]);
}

$a には以下が含まれるようになりました:

array(6) {
  [0]=>
  array(2) {
    [0]=>
    string(10) "2013-12-22"
    [1]=>
    string(2) "12"
  }
  [1]=>
  array(2) {
    [0]=>
    string(10) "2013-08-25"
    [1]=>
    string(1) "5"
  }
  [2]=>
  array(2) {
    [0]=>
    string(10) "2013-08-27"
    [1]=>
    string(2) "10"
  }
  [3]=>
  array(2) {
    [0]=>
    string(10) "2013-08-22"
    [1]=>
    string(1) "1"
  }
  [4]=>
  array(2) {
    [0]=>
    string(10) "2013-08-23"
    [1]=>
    string(1) "3"
  }
  [5]=>
  array(2) {
    [0]=>
    string(10) "2013-08-29"
    [1]=>
    string(1) "5"
  }
}
于 2013-06-25T21:52:56.243 に答える