Есть массив
$arr1[] = array("id"=>"1", "count"=>"0", "otd"=>"south");
$arr1[] = array("id"=>"2", "count"=>"4", "otd"=>"north");
$arr1[] = array("id"=>"3", "count"=>"8", "otd"=>"south");
и второй массив:
$arr2[] = array("id"=>"1", "count"=>"1", "otd"=>"south");
$arr2[] = array("id"=>"2", "count"=>"3", "otd"=>"north");
$arr2[] = array("id"=>"3", "count"=>"5", "otd"=>"south");
У условных пользователей в этом массивe совпадают id, но count разный. Как можно сделать третий массив результирующий?(Суммируются count) Я пробовал при помощи array_merge, но второй массив просто дозаписывался в конец
arr3[1] => Array
(
[id] => 1
[count] => 1 //0+1
[otd] => south
)
arr3[2] => Array
(
[id] => 2
[count] => 7 //3+4
[otd] => north
)
arr3[3] => Array
(
[id] => 3
[count] => 13 //5+8
[otd] => south
)
И вот еще, что интересно. Если переименую второй ключ в массиве и массивы будут такими:
$arr1[] = array("id"=>"1", "count"=>"0", "otd"=>"south");
$arr1[] = array("id"=>"2", "count"=>"4", "otd"=>"north");
$arr1[] = array("id"=>"3", "count"=>"8", "otd"=>"south");
$arr2[] = array("id"=>"1", "not_count"=>"1", "otd"=>"south");
$arr2[] = array("id"=>"2", "not_count"=>"3", "otd"=>"north");
$arr2[] = array("id"=>"3", "not_count"=>"5", "otd"=>"south");
Как можно получить массив такого вида?
arr3[1] => Array
(
[id] => 1
[count] => 0
[otd] => south
[not_count] => 1
)
arr3[2] => Array
(
[id] => 2
[count] => 3
[otd] => north
[not_count] => 4
)
arr3[3] => Array
(
[id] => 3
[count] => 5
[otd] => south
[not_count] => 8
)
Пробовал сделать слияние, но [not_count] записывался поверх [count] первого массива с новым значением
<?php
$arr1= array(array("id"=>"1", "count"=>"0", "otd"=>"south"),
array("id"=>"2", "count"=>"4", "otd"=>"north"),
array("id"=>"3", "count"=>"8", "otd"=>"south"));
$arr2 = array(array("id"=>"1", "count"=>"1", "otd"=>"south"),
array("id"=>"2", "count"=>"3", "otd"=>"north"),
array("id"=>"3", "count"=>"5", "otd"=>"south"));
foreach ($arr1 as $key => $value) {
# code...
foreach ($arr2 as $key1 => $value1) {
# code...
if($value['id']==$value1['id']){
$data[]=array('id'=>$value['id'], 'count'=>$value['count']+$value1['count'], 'otd'=>$value['otd']);
}
}
}
print_r($data);
?>
если учесть, что со второго массива вам по id надо вытащить count, то сначала приведите его к такому виду
$arr2 = array_column($arr2, 'count', 'id');
тогда id станут ключами, а count значениями
далее преобразуйте первый массив, пройдясь по нему и прибавляя значения второго по id
$result = array_map(function($v) use ($arr2){
$v['count'] += $arr2[$v['id']];
return $v;
}, $arr1);
а если порядок значений в массивах одинаков, и их число идентично, можно и еще проще, сразу испоьзовать map
$result = array_map(function($a, $b){
$a['count'] += $b['count'];
return $a;
}, $arr1, $arr2);
Сборка персонального компьютера от Artline: умный выбор для современных пользователей