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

报告相同问题?

悬赏问题

  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误