如何合并具有相同键值对的数组
how to merge array with same key, value pair
如何合并 2 个具有相同键值的数组,下面 PHP 中的值对是返回的数据。
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"
]
我需要将数组[0] 和数组[1] 与数组[5] 和数组[6] 合并,因为它们具有相同的组键和值。我正在使用 Laravel 顺便说一句。
您可以尝试以下操作。检测数组中的哪些项目具有相同的组 ID。然后合并那些你想合并的项目或键。
这里我使用的是 array_merge_recursive,但是它将 id 和 name 字段合并到一个数组中,因此替换了组键。但在这里要小心,您可能希望更明确地说明您希望合并的内容。也许只是你的任务和简介。
<?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);
输出:
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',
),
),
)
您可以使用 Laravel 合集 unique method。
这允许您设置一个键来定义什么是唯一的。
您可以 select 嵌套 属性 与点语法合并。即 group.id
.
$merged = collect($original)->unique('group.id');
如何合并 2 个具有相同键值的数组,下面 PHP 中的值对是返回的数据。
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"
]
我需要将数组[0] 和数组[1] 与数组[5] 和数组[6] 合并,因为它们具有相同的组键和值。我正在使用 Laravel 顺便说一句。
您可以尝试以下操作。检测数组中的哪些项目具有相同的组 ID。然后合并那些你想合并的项目或键。
这里我使用的是 array_merge_recursive,但是它将 id 和 name 字段合并到一个数组中,因此替换了组键。但在这里要小心,您可能希望更明确地说明您希望合并的内容。也许只是你的任务和简介。
<?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);
输出:
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',
),
),
)
您可以使用 Laravel 合集 unique method。
这允许您设置一个键来定义什么是唯一的。
您可以 select 嵌套 属性 与点语法合并。即 group.id
.
$merged = collect($original)->unique('group.id');