Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中的求和合并数组_Php_Arrays - Fatal编程技术网

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)