混淆多维数组和合并

时间:2013-06-25 21:47:53

标签: php arrays

我已成功使用以下代码通过差异合并两个数组:

$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 中不存在的元素。

我现在遇到的问题是针对以下数组格式做同样的事情:

$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
        )

)

我知道他们的密钥不再是日期,但我应该如何检查每个数组并确保我没有获得双重条目?

1 个答案:

答案 0 :(得分: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"
  }
}