doubo1711 2016-08-23 03:06
浏览 99
已采纳

如何使用相同的键,值对合并数组

how can I merge 2 array with same key, value pair in PHP below is the returned data.

array:8
  0 => array:3
    "group" => array:2
      "id" => 1
      "name" => "data 1"
    ]
    "brief" => array:5
    "tasks" => array:1
  ]
  1 => array:3
    "group" => array:2
      "id" => 1
      "name" => "data 1"
    ]
    "brief" => array:5
    "tasks" => array:1
  ]
  2 => array:3
  3 => array:3
  4 => array:3
  5 => array:3
    "group" => array:2
      "id" => 6
      "name" => "data 5"
    ]
    "brief" => array:5
    "tasks" => array:1
  ]
  6 => array:3
    "group" => array:2
      "id" => 6
      "name" => "data 5"
    ]
    "brief" => array:5
    "tasks" => array:1
  ]
  "totalHours" => "31"
]

I need to merge array[0] and array[1] same with array[5] and array[6] since they have both the same group key and value. Im using Laravel btw.

  • 写回答

2条回答 默认 最新

  • dongshimao7115 2016-08-23 05:36
    关注

    You could try something like the following. Detect which items in your array have the same group ids. Then merge those items or the keys that you want merged.

    Here I'm using array_merge_recursive, but it merges the id and name fields into an array, hence replacing the group key. But do be careful here, you might wish to be more explicit in what you wish to merge. Perhaps just the tasks and brief in your case.

    <?php
    $items = [
        [
            'group' => [
                'id' => '23',
                'name' => 'peach'
                ],
            'tasks' => ['foo', 'bar']
        ],
        ['big', 'fat', 'mamma'],
        [
            'group' => [
                'id' => '23',
                'name' => 'peach'
                ],
            'tasks' => ['baz', 'bat']
        ],
    ];
    
    $groupIds = [];
    foreach($items as $key => $item) {
        if(isset($item['group'])) {
            $groupIds[$item['group']['id']][] = $key;
        }
    }
    
    foreach($groupIds as $group_id => $item_keys) {
        $merged_item = array();
        foreach($item_keys as $key) {
            $merged_item = array_merge_recursive($merged_item, $items[$key]);
            $merged_item['group'] = $items[$key]['group'];
            unset($items[$key]);
        }
        array_push($items, $merged_item);
    }
    
    var_export($items);
    

    Output:

    array (
      1 => 
      array (
        0 => 'big',
        1 => 'fat',
        2 => 'mamma',
      ),
      3 => 
      array (
        'group' => 
        array (
          'id' => '23',
          'name' => 'peach',
        ),
        'tasks' => 
        array (
          0 => 'foo',
          1 => 'bar',
          2 => 'baz',
          3 => 'bat',
        ),
      ),
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架