合并相同键的数组
Merge array where same key
I have following 2 arrays:
$arr1 = [
0 => [
'id' => 1,
'name' => 'Peter',
],
1 => [
'id' => 2,
'name' => 'John',
]
]
$arr2 = [
0 => [
'id' => 1,
'surname' => 'Newman',
],
1 => [
'id' => 2,
'surname' => 'Cena',
]
]
我想做的是合并这些引用同一个键的数组。在这种情况下,我想在 id
匹配的地方合并它们。所以我期望的输出是:
$finalArr = [
0 => [
'id' => 1,
'name' => 'Peter',
'surname' => 'Newman',
],
1 => [
'id' => 2,
'name' => 'John',
'surname' => 'Cena',
]
]
我正在使用 laravel,但语言应该不太重要。如果可能,我想使用 collections
。
试试这个:
foreach ($arr2 as $key2 => $value2) {
foreach ($arr1 as $key1 => $value1) {
if($value2['id'] == $value1['id']){
$arr1[$key1] = array(
'id' => $value1['id'],
'name' => $value1['name'],
'surname' => $value2['surname']
);
}
}
}
$arr1 = [
0 => [
'id' => 1,
'name' => 'Peter',
],
1 => [
'id' => 2,
'name' => 'John',
]
];
$arr2 = [
0 => [
'id' => 1,
'surname' => 'Newman',
],
1 => [
'id' => 2,
'surname' => 'Cena',
]
];
// First, I create a new array
$new_array = array();
// Now I loop throught first array and merge each array by key
foreach ($arr1 as $key => $value) {
// If I just check if second array has the key so you can merge both
// If you are 100% sure that both array has same key, no need to use isset()
if (isset($arr2[$key])) {
$new_array[$key] = array_merge($arr1[$key], $arr2[$key]);
}
}
var_dump($new_array);
输出为:
array (size=2)
0 =>
array (size=3)
'id' => int 1
'name' => string 'Peter' (length=5)
'surname' => string 'Newman' (length=6)
1 =>
array (size=3)
'id' => int 2
'name' => string 'John' (length=4)
'surname' => string 'Cena' (length=4)
您可以使用 array_map and array_merge 并检查键是否匹配:
$finalArr = array_map(function($x) use ($arr2) {
foreach($arr2 as $b) {
if ($x["id"] === $b["id"]) {
return array_merge($x, $b);
}
}
return $x;
}, $arr1);
var_dump($finalArr);
I have following 2 arrays:
$arr1 = [
0 => [
'id' => 1,
'name' => 'Peter',
],
1 => [
'id' => 2,
'name' => 'John',
]
]
$arr2 = [
0 => [
'id' => 1,
'surname' => 'Newman',
],
1 => [
'id' => 2,
'surname' => 'Cena',
]
]
我想做的是合并这些引用同一个键的数组。在这种情况下,我想在 id
匹配的地方合并它们。所以我期望的输出是:
$finalArr = [
0 => [
'id' => 1,
'name' => 'Peter',
'surname' => 'Newman',
],
1 => [
'id' => 2,
'name' => 'John',
'surname' => 'Cena',
]
]
我正在使用 laravel,但语言应该不太重要。如果可能,我想使用 collections
。
试试这个:
foreach ($arr2 as $key2 => $value2) {
foreach ($arr1 as $key1 => $value1) {
if($value2['id'] == $value1['id']){
$arr1[$key1] = array(
'id' => $value1['id'],
'name' => $value1['name'],
'surname' => $value2['surname']
);
}
}
}
$arr1 = [
0 => [
'id' => 1,
'name' => 'Peter',
],
1 => [
'id' => 2,
'name' => 'John',
]
];
$arr2 = [
0 => [
'id' => 1,
'surname' => 'Newman',
],
1 => [
'id' => 2,
'surname' => 'Cena',
]
];
// First, I create a new array
$new_array = array();
// Now I loop throught first array and merge each array by key
foreach ($arr1 as $key => $value) {
// If I just check if second array has the key so you can merge both
// If you are 100% sure that both array has same key, no need to use isset()
if (isset($arr2[$key])) {
$new_array[$key] = array_merge($arr1[$key], $arr2[$key]);
}
}
var_dump($new_array);
输出为:
array (size=2)
0 =>
array (size=3)
'id' => int 1
'name' => string 'Peter' (length=5)
'surname' => string 'Newman' (length=6)
1 =>
array (size=3)
'id' => int 2
'name' => string 'John' (length=4)
'surname' => string 'Cena' (length=4)
您可以使用 array_map and array_merge 并检查键是否匹配:
$finalArr = array_map(function($x) use ($arr2) {
foreach($arr2 as $b) {
if ($x["id"] === $b["id"]) {
return array_merge($x, $b);
}
}
return $x;
}, $arr1);
var_dump($finalArr);