我有两个数组如下
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
)
)
和
Array
(
[0] => Array
(
[taskcount] => 1
[client_id] => 5
[client_name] => Others
),
[1] => Array
(
[taskcount] => 1
[client_id] =>7
[client_name] => Othersnew
)
)
我希望合并两个数组以便返回一些类似的东西,意味着如果两个数组都有共同的client_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
)
)
答案 0 :(得分:1)
这有效(尽管很难) -
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)
答案 1 :(得分:0)
将它们命名为$ 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);
}