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.
@Ghost Ага, ты прав, моя плохая, я написал «с», а не «где»! Просто привычка, 80% вопросов о php и array, которые я видел, дублируются, поэтому ...: x






Попробуй это:
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 и 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);
Также благодарю за демонстрацию (:
где коды?