php中的求和合并数组
我有两个数组,如下所示php中的求和合并数组,php,arrays,Php,Arrays,我有两个数组,如下所示 Array ( [0] => Array ( [taskcount] => 3 [client_id] => 1 [client_name] => No Project Set ) [1] => Array ( [taskcount] => 1 [cli
Array
(
[0] => Array
(
[taskcount] => 3
[client_id] => 1
[client_name] => No Project Set
)
[1] => Array
(
[taskcount] => 1
[client_id] => 4
[client_name] => Check
)
[2] => Array
(
[taskcount] => 1
[client_id] => 5
[client_name] => Others
)
)
及
我想合并两个数组,以便返回类似的结果,这意味着如果两个数组都有公共的客户机id,我想对taskcount求和
Array
(
[0] => Array
(
[taskcount] => 3
[client_id] => 1
[client_name] => No Project Set
)
[1] => Array
(
[taskcount] => 1
[client_id] => 4
[client_name] => Check
)
[2] => Array
(
[taskcount] => 2
[client_id] => 5
[client_name] => Others
)
[3] => Array
(
[taskcount] => 1
[client_id] =>7
[client_name] => Othersnew
)
)
将它们命名为$Array1、$Array2 一次将一个客户端从$Array2添加到$Array1 检查同一客户机是否进行合计,否则添加新客户机
while (count($Array2) !== 0) {
$anotherClient = $array_pop($Array2);
foreach($Array1 as $client) {
if ($anotherClient['client_id'] === $client['client_id']) {
$client['taskcount'] += $anotherClient['taskcount'];
continue;
}
}
array_push($Array1, $anotherClient);
}
这是有效的(尽管这是一条艰难的道路)——
这是给定输入的输出-
/*
OUTPUT
*/
array
0 =>
array
'taskcount' => int 3
'client_id' => int 1
'client_name' => string 'No Project Set' (length=14)
1 =>
array
'taskcount' => int 1
'client_id' => int 4
'client_name' => string 'Check' (length=5)
2 =>
array
'taskcount' => int 2
'client_id' => int 5
'client_name' => string 'Others' (length=6)
3 =>
array
'taskcount' => int 1
'client_id' => int 7
'client_name' => string 'Othersnew' (length=9)
听起来像是一个有趣的递归问题,很高兴看到您的第一次尝试。抱歉,必须*要查看您的第一次尝试,除了所需的结果外,您还必须将
array\u uintersect()
()与array\u merge()
结合使用。
function merge_n_add($a1, $a2){
$result = $a1;
$client_ids = array_map(function($a){return $a['client_id'];}, $result);
foreach($a2 as $v){
if(in_array($v['client_id'], $client_ids)){
$res_index = array_search($v['client_id'] ,$client_ids);
$result[$res_index]['taskcount'] += $v['taskcount'];
}else{
$result[] = $v;
}
}
return $result;
}
//Assuming the 2 arrays are $a1 and $a2
var_dump(merge_n_add($a1, $a2));
/*
OUTPUT
*/
array
0 =>
array
'taskcount' => int 3
'client_id' => int 1
'client_name' => string 'No Project Set' (length=14)
1 =>
array
'taskcount' => int 1
'client_id' => int 4
'client_name' => string 'Check' (length=5)
2 =>
array
'taskcount' => int 2
'client_id' => int 5
'client_name' => string 'Others' (length=6)
3 =>
array
'taskcount' => int 1
'client_id' => int 7
'client_name' => string 'Othersnew' (length=9)