dousilie9522 2013-06-25 21:47
浏览 31
已采纳

混淆多维数组和合并

I have had success merging two arrays by difference using the following code:

$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;
    }
}

This will return:

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
)

The idea is for a to additionally hold the elements from b that are not present in a.

I am having issues now doing the same thing for the following array format:

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

I went to try this:

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

But the returned result is far from what I need:

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
        )

)

I understand they keys are no longer the dates, but how should I go about checking each array and making sure I don't get double entries?

  • 写回答

1条回答 默认 最新

  • dou4624 2013-06-25 21:52
    关注
    $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 now contains:

    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"
      }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用