dongping9475 2011-09-06 13:27
浏览 16
已采纳

在两者中合并具有索引权重的两个数组

I have two array like this and want to merge like

Take 1st index Array 1 check

  • if it is present in Array 2
    Insert in Array 3
    add weight of Array 1 and Array 2
  • else if not present
    take 1st index of Array 2

Take 1st index of Array 2 and check

  • if it is present in Array 1
    Insert in Array 3
    add weight of Array 1 and Array 2
  • else if not present
    take 2nd index of Array 1

Take 2nd index of Array 1 and check

  • if it is present in Array 2
    Insert in Array 3
    add weight of Array 1 and Array 2
  • else if not present
    take 1st index of Array 2

Take 1st index of Array 2 and check

Note above logic is for given example
For Example

Array 1
(
    [144] => Array
    (
        [weight] => 2
    )
    [145] => Array
    (
        [weight] => 1
    )
    [177] => Array
    (
        [weight] => 1
    )
)

Array 2
(
    [93] => Array
    (
        [weight] => 4
    )
    [133] => Array
    (
        [weight] => 4
    )
    [144] => Array
    (
        [weight] => 4
    )
    [145] => Array
    (
        [weight] => 4
    )
    [141] => Array
    (
        [weight] => 1
    )
)

I want result as

Array 3
(
    [144] => Array
    (
        [weight] => 6
    )
    [145] => Array
    (
        [weight] => 5
    )
    [93] => Array
    (
        [weight] => 4
    )
    [133] => Array
    (
        [weight] => 4
    )
    [177] => Array
    (
        [weight] => 1
    )
    [141] => Array
    (
        [weight] => 1
    )
)

Thanks in Advance

  • 写回答

3条回答 默认 最新

  • doujuanqi2909 2011-09-06 13:54
    关注

    You seems to want second array first,
    then append first array

    maybe this is works

    $a = ...; //first array
    $b = ...; // second array
    
    var_export($a);
    var_export($b);
    
    $rtn = $tmp = array();
    foreach ($b as $idx=>$arr)
    {
      if (isset($a[$idx]))
      {
        $rtn[$idx]['weight'] = $arr['weight'] + $a[$idx]['weight'];
        unset($a[$idx]);
      }
      else
      {
        $tmp[$idx]['weight'] = $arr['weight'];
      }
    }
    
    $res = $rtn+$tmp+$a;
    print_r($res);
    

    result

    array (
      144 =>
      array (
        'weight' => 2,
      ),
      145 =>
      array (
        'weight' => 1,
      ),
      177 =>
      array (
        'weight' => 1,
      ),
    )array (
      93 =>
      array (
        'weight' => 4,
      ),
      133 =>
      array (
        'weight' => 4,
      ),
      144 =>
      array (
        'weight' => 4,
      ),
      145 =>
      array (
        'weight' => 4,
      ),
      141 =>
      array (
        'weight' => 1,
      ),
    )Array
    (
        [144] => Array
            (
                [weight] => 6
            )
    
        [145] => Array
            (
                [weight] => 5
            )
    
        [93] => Array
            (
                [weight] => 4
            )
    
        [133] => Array
            (
                [weight] => 4
            )
    
        [141] => Array
            (
                [weight] => 1
            )
    
        [177] => Array
            (
                [weight] => 1
            )
    
    )
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮