两个二维数组组合并且日期相同的其他值相加

前两天做店铺收入的统计,一个数据表是按天进行统计的,另一个是按订单进行统计的,但是我统计数据时需要进行数据组合,组合过程中发现两则的日期有相同的有不相同的很不好处理:

类似这样的两个数组

$arr1=array(
    '0'=>array(
        'month'=>'2017-09',
        'num'=>'10',
        'price'=>'0.02'
        ),
    '1'=>array(
        'month'=>'2017-08',
        'num'=>'2',
        'price'=>'10.02'
        ),
    '2'=>array(
        'month'=>'2017-07',
        'num'=>'3',
        'price'=>'0.11'
        ),
    '3'=>array(
        'month'=>'2016-05',
        'num'=>'3',
        'price'=>'0.7'
        ),
    );
$arr2=array(
    '0'=>array(
        'month'=>'2017-08',
        'num'=>'7',
        'price'=>'0.21'
        ),
    '1'=>array(
        'month'=>'2017-07',
        'num'=>'6',
        'price'=>'12'
        ),
    '2'=>array(
        'month'=>'2017-04',
        'num'=>'5',
        'price'=>'1.17'
        ),
        
    '3'=>array(
        'month'=>'2016-12',
        'num'=>'5',
        'price'=>'0.88'
        ),
    );

在网上找资料找到一些类似的然后自己修改了下,如下:

//将数组合并,并且month相同的num相加
$item = array();
$item = array_merge($arr1, $arr2);
//echo "<pre>";
//print_r($item);exit;
$arr = array();
for ($i = 0; $i < count($item); $i++) {
    $a = $item[$i];
    foreach ($item as $key => $value) {
        if ($key == $i) {
            continue;
        } else {
            if ($a['month'] == $value['month']) {
                $a['num'] = $a['num'] + $value['num'];
                $a['price'] = $a['price'] + $value['price'];
            }
        }
    }
    $arr[] = $a;
}

//对数组进行处理
function array_unique_fb($array2D){
    foreach ($array2D as $v) {
        $v = join(',', $v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
        $temp[] = $v;
    }
    $temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
    $temp=array_values($temp);//将键值重新排序
    foreach ($temp as $k => $v) {
        $temp = explode(',', $v); //再将拆开的数组重新组装
        //索引排序
        $temp2[$k]['month'] =$temp[0];
          $temp2[$k]['num']     =$temp[1];
          $temp2[$k]['price'] =$temp[2];

    }
    return $temp2;
}
//这时得到一个没有按日期排序的新二维数组
$arr3 = array_unique_fb($arr);


$leng=count($arr3);
//将数组按日期进行倒序排列
for ($i=1; $i <$leng ; $i++) { 
    for ($k=0; $k <$leng-$i ; $k++) { 
        //if($arr3[$k]['month']<$arr3[$k+1]['month']){发现也行得通
        if(strtotime($arr3[$k]['month'])<strtotime($arr3[$k+1]['month'])){
            $aw=$arr3[$k];
            $arr3[$k]=$arr3[$k+1];
            $arr3[$k+1]=$aw;
        }
    }
}

打印结果:

array(6) {
  [0]=>
  array(3) {
    ["month"]=>
    string(7) "2017-09"
    ["num"]=>
    string(2) "10"
    ["price"]=>
    string(4) "0.02"
  }
  [1]=>
  array(3) {
    ["month"]=>
    string(7) "2017-08"
    ["num"]=>
    string(1) "9"
    ["price"]=>
    string(5) "10.23"
  }
  [2]=>
  array(3) {
    ["month"]=>
    string(7) "2017-07"
    ["num"]=>
    string(1) "9"
    ["price"]=>
    string(5) "12.11"
  }
  [3]=>
  array(3) {
    ["month"]=>
    string(7) "2017-04"
    ["num"]=>
    string(1) "5"
    ["price"]=>
    string(4) "1.17"
  }
  [4]=>
  array(3) {
    ["month"]=>
    string(7) "2016-12"
    ["num"]=>
    string(1) "5"
    ["price"]=>
    string(4) "0.88"
  }
  [5]=>
  array(3) {
    ["month"]=>
    string(7) "2016-05"
    ["num"]=>
    string(1) "3"
    ["price"]=>
    string(3) "0.7"
  }
}
不断的修改不断的完善
原文地址:https://www.cnblogs.com/lhwhqy/p/7727499.html