Есть массив
$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);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как правильно реализовать регистрацию и авторизацию в мобильном приложении, подходит ли для этого RESTful веб приложение, какой протокол для...
Решил доделать задачи, которые раньше не осилилНо до сих пор не могу понять 2-е условие
Возникла проблема с переходом с монолитного проекта на ммикросервисную архитектуруЕсть несколько сервисов которые будут распологаться...