在PHP中求和并合并数组

时间:2014-02-09 14:32:23

标签: php arrays

我有两个数组如下

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
            )


    )

2 个答案:

答案 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);
}