| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710 |
- <?php
- namespace app\admin\controller;
- use think\Db;
- class EnergyStatisticsOld extends Auth
- {
- //医院每日用电电统计
- public function dailyElectricity()
- {
- $month = input('start',date('Y-m'));
- $data = $this->dailyElectricityData($month);
- $this->assign('data',$data['res']);
- $this->assign('count',$data['count']);
- $this->assign('totalData',$data['total']);
- $this->assign('start',$month);
- $this->assign('date',date('Y年m月',strtotime($month)));
- return $this->fetch();
- }
- public function dailyElectricityData($month){
- $dep = getDay(strtotime($month));
- $lastDayOfLastMonth = date('Ymd', strtotime("-1 day", strtotime(date("Y-m-01", strtotime($month)))));
- $map[] = ['del','=',0];
- $map[] = ['org_id','=',$this->orgId];
- $sn = Db::name('energy_electricity')
- ->where($map)
- ->where('enable',1)
- ->where('parent_id',0)
- ->column('number');
- $res = [];
- $total = 0;
- foreach ($dep as $k=>$v){
- $degree = 0;
- foreach ($sn as $kk =>$vv){
- $row = Db::name('energy_electricity_record')
- ->where($map)
- ->where('read_yyyymmdd',$v)
- ->where('sn',$vv)
- ->field('sn,rate,degree')
- ->find();
- $res[$k][$kk] = $row;
- if ($k > 0 && !empty($row)){
- // $res[$k][$kk]['real_degree'] = number_format(($res[$k][$kk]['degree'] - $res[$k-1][$kk]['degree']) * $res[$k][$kk]['rate'],2,'.','');
- $res[$k][$kk]['real_degree'] = sprintf("%.2f", ($res[$k][$kk]['degree'] - $res[$k-1][$kk]['degree']) * $res[$k][$kk]['rate']);
- $degree += $res[$k][$kk]['real_degree'];
- }
- if($k == 0){
- $row2= Db::name('energy_electricity_record')
- ->where($map)
- ->where('read_yyyymmdd',$lastDayOfLastMonth)
- ->where('sn',$vv)
- ->field('sn,rate,degree')
- ->find();
- // $row2['degree'] = isset($row2['degree'])?$row2['degree']:0;
- //$res[$k][$kk]['real_degree'] = number_format(($res[$k][$kk]['degree'] - $row2['degree']) * $res[$k][$kk]['rate'],2,'.','');
- $res[$k][$kk]['real_degree'] = sprintf("%.2f", ($res[$k][$kk]['degree'] - $row2['degree']) * $res[$k][$kk]['rate']);
- $degree += $res[$k][$kk]['real_degree'];
- }
- }
- $res[$k]['total'] = sprintf('%.2f',$degree);
- $total+=$degree;
- }
- $total = sprintf('%.2f',$total);
- return ['res'=>$res,'total'=>$total,'count'=>count($sn)];
- }
- //科室月电度统计
- public function monthDepElectricity()
- {
- $month = input('start', date('Y'));
- for ($i = 1; $i < 13; $i++) {
- $monthList[] = $i.'月份';
- }
- $data = $this->monthDepElectricityData($month);
- $this->assign('data', $data);
- $this->assign('monthList', $monthList);
- $this->assign('start', $month);
- // halt($data);
- return $this->fetch();
- }
- public function monthDepElectricityData($month)
- {
- $month = $month.'0101';
- for ($i = 1; $i < 13; $i++) {
- if ($i<10){
- $date[] = date('Y'.'0'.$i,strtotime($month));
- if ($i==1){
- $time = strtotime($date[0].'01');
- $lastDate[] = date('Ym',strtotime('-1 month',$time));
- }else{
- $lastDate[] = date('Y'.'0'.($i-1),strtotime($month));
- }
- }else{
- $date[] = date('Y'.$i,strtotime($month));
- if ($i==10){
- $lastDate[] = date('Y'.'0'.($i-1),strtotime($month));
- }else{
- $lastDate[] = date('Y'.($i-1),strtotime($month));
- }
- }
- }
- $map[] = ['del','=',0];
- $map[] = ['org_id','=',$this->orgId];
- $list = [];
- $dep = Db::name('energy_dep')
- ->where($map)
- ->where('enable',1)
- ->field('id,name,area,address')
- ->select();
- // halt($dep);
- foreach ($dep as $item){
- $re = Db::name('energy_electricity')
- ->Where($map)
- ->where('enable',1)
- ->Where('dep','like','%'.$item['id'].'%')
- ->select();
- if(!empty($re)){
- $list[] = $re;
- }
- }
- $newList = $this->getNewList($list);
- foreach ($newList as $k => $v){
- foreach ($v as $k2=>$v2){
- $address = json_decode($v2['address']);
- $dep_id = json_decode($v2['dep']);
- $newList[$k][$k2]['info']['floor1'] = Db::name('energy_area')->where('id',$address[1])->value('title');
- $newList[$k][$k2]['info']['floor2'] = Db::name('energy_area')->where('id',$address[2])->value('title');
- $newList[$k][$k2]['info']['dep'] = Db::name('energy_dep')->where('id',$dep_id[0])->value('name');
- $newList[$k][$k2]['info']['type'] = Db::name('energy_sort')->where('id',$v2['type_e'])->value('name');
- foreach ($date as $k3=>$v3){
- $re = Db::name('energy_electricity_record')
- ->field('sn,degree,rate,read_yyyymm')
- ->where($map)
- ->where('read_yyyymm',$v3)
- ->where('sn',$v2['number'])
- ->find();
- $re2 = Db::name('energy_electricity_record')
- ->field('sn,degree')
- ->where($map)
- ->where('read_yyyymm',$lastDate[$k3])
- ->where('sn',$v2['number'])
- ->find();
- if (isset($re['sn'])){
- $newList[$k][$k2]['rate'] = $re['rate'];
- }
- if ($re['degree']){
- if ($v2['share'] == 1 || (string)$v2['share'] == '0'){
- $re['real_degree'] = ($re['degree'] - $re2['degree']) * $re['rate'] * $v2['percent'];
- }else{
- $re['real_degree'] =($re['degree'] - $re2['degree']) * $re['rate'];
- }
- }
- $newList[$k][$k2]['data'][] = $re;
- }
- }
- }
- foreach ($date as $k=>$v){
- for($i =0;$i<count($newList);$i++){
- $count = 0;
- foreach ($newList[$i] as $k2=>$v2){
- $count += $v2['data'][$k]['real_degree']?$v2['data'][$k]['real_degree']:0;
- $total[$i][$k]=$count;
- }
- }
- }
- foreach ($total as $k=>$v){
- foreach ($v as $k2=>$v2){
- $newList[$k][0]['data'][$k2]['total']=$v2;
- }
- }
- return $newList;
- }
- //医院每日用水统计
- public function dailyWater()
- {
- $month = input('start',date('Y-m'));
- $data = $this->dailyWaterData($month);
- $this->assign('data',$data['res']);
- $this->assign('count',$data['count']);
- $this->assign('totalData',$data['total']);
- $this->assign('start',$month);
- $this->assign('date',date('Y年m月',strtotime($month)));
- return $this->fetch();
- }
- public function dailyWaterData($month){
- $dep = getDay(strtotime($month));
- $lastDayOfLastMonth = date('Ymd', strtotime("-1 day", strtotime(date("Y-m-01", strtotime($month)))));
- $map[] = ['del','=',0];
- $map[] = ['org_id','=',$this->orgId];
- $sn = Db::name('energy_water')
- ->where($map)
- ->where('enable',1)
- ->where('parent_id',0)
- ->column('number');
- $res = [];
- $total = 0;
- foreach ($dep as $k=>$v){
- $degree = 0;
- foreach ($sn as $kk =>$vv){
- $row = Db::name('energy_water_record')
- ->where($map)
- ->where('read_yyyymmdd',$v)
- ->where('sn',$vv)
- ->field('sn,degree')
- ->find();
- $res[$k][$kk] = $row;
- if ($k > 0 && !empty($row)){
- // $res[$k][$kk]['real_degree'] = number_format(($res[$k][$kk]['degree'] - $res[$k-1][$kk]['degree']) ,2,'.','');
- $res[$k][$kk]['real_degree'] = sprintf("%.2f", ($res[$k][$kk]['degree'] - $res[$k-1][$kk]['degree']));
- $degree += $res[$k][$kk]['real_degree'];
- }
- if($k == 0){
- $row2= Db::name('energy_water_record')
- ->where($map)
- ->where('read_yyyymmdd',$lastDayOfLastMonth)
- ->where('sn',$vv)
- ->field('sn,degree')
- ->find();
- // $row2['degree'] = isset($row2['degree'])?$row2['degree']:0;
- //$res[$k][$kk]['real_degree'] = number_format(($res[$k][$kk]['degree'] - $row2['degree']) ,2,'.','');
- $res[$k][$kk]['real_degree'] = sprintf("%.2f", ($res[$k][$kk]['degree'] - $row2['degree']));
- $degree += $res[$k][$kk]['real_degree'];
- }
- }
- $res[$k]['total'] = sprintf('%.2f',$degree);
- $total+=$degree;
- }
- $total = sprintf('%.2f',$total);
- return ['res'=>$res,'total'=>$total,'count'=>count($sn)];
- }
- //科室月冷热水量统计
- public function monthDepWater()
- {
- $month = input('start', date('Y'));
- for ($i = 1; $i < 13; $i++) {
- $monthList[] = $i.'月份';
- }
- $data = $this->monthDepWaterData($month);
- $this->assign('data', $data);
- $this->assign('monthList', $monthList);
- $this->assign('start', $month);
- // halt($data);
- return $this->fetch();
- }
- public function monthDepWaterData($month)
- {
- $month = $month.'0101';
- for ($i = 1; $i < 13; $i++) {
- if ($i<10){
- $date[] = date('Y'.'0'.$i,strtotime($month));
- if ($i==1){
- $time = strtotime($date[0].'01');
- $lastDate[] = date('Ym',strtotime('-1 month',$time));
- }else{
- $lastDate[] = date('Y'.'0'.($i-1),strtotime($month));
- }
- }else{
- $date[] = date('Y'.$i,strtotime($month));
- if ($i==10){
- $lastDate[] = date('Y'.'0'.($i-1),strtotime($month));
- }else{
- $lastDate[] = date('Y'.($i-1),strtotime($month));
- }
- }
- }
- $map[] = ['del','=',0];
- $map[] = ['org_id','=',$this->orgId];
- $list = [];
- $dep = Db::name('energy_dep')
- ->where($map)
- ->where('enable',1)
- ->field('id,name,area,address')
- ->select();
- foreach ($dep as $item){
- $re = Db::name('energy_water')
- ->Where($map)
- ->where('enable',1)
- ->Where('dep','like','%'.$item['id'].'%')
- ->select();
- if(!empty($re)){
- $list[] = $re;
- }
- }
- if (empty($list)){
- return $list;
- }
- $newList = $this->getNewList($list);
- foreach ($newList as $k => $v){
- foreach ($v as $k2=>$v2) {
- $address = json_decode($v2['address']);
- $dep_id = json_decode($v2['dep']);
- $newList[$k][$k2]['info']['floor1'] = Db::name('energy_area')->where('id', $address[1])->value('title');
- $newList[$k][$k2]['info']['floor2'] = Db::name('energy_area')->where('id', $address[2])->value('title');
- $newList[$k][$k2]['info']['dep'] = Db::name('energy_dep')->where('id', $dep_id[0])->value('name');
- if ($v2['type_w'] == 0) {//统计冷水
- foreach ($date as $k3 => $v3) {
- $re = Db::name('energy_water_record')
- ->field('sn,degree,read_yyyymm')
- ->where($map)
- ->where('read_yyyymm', $v3)
- ->where('sn', $v2['number'])
- ->find();
- $re2 = Db::name('energy_water_record')
- ->field('sn,degree')
- ->where($map)
- ->where('read_yyyymm', $lastDate[$k3])
- ->where('sn', $v2['number'])
- ->find();
- if ($re['degree']) {
- if ($v2['share'] == 1 || (string)$v2['share'] == '0'){
- $re['cold_degree'] = ($re['degree'] - $re2['degree']) * $v2 ['percent'];
- }else{
- $re['cold_degree'] = ($re['degree'] - $re2['degree']);
- }
- }
- $newList[$k]['sn'] = $v2['number'];
- $newList[$k]['cold'][] = $re;
- }
- }
- if ($v2['type_w'] == 1) {
- $hotIn = 0;
- foreach ($date as $k4 => $v4) {
- $hotIn = Db::name('energy_water_record')
- ->field('sn,degree,read_yyyymm')
- ->where($map)
- ->where('read_yyyymm', $v4)
- ->where('sn', $v2['number'])
- ->sum('degree');
- if ($v2['share'] == 1){
- $hotIn = $hotIn*$v2['percent'];
- }
- $newList[$k]['hotIn'][] = $hotIn;
- }
- }
- if ($v2['type_w'] == 2) {
- $hotReturn = 0;
- foreach ($date as $k5 => $v5) {
- $hotReturn = Db::name('energy_water_record')
- ->field('sn,degree,read_yyyymm')
- ->where($map)
- ->where('read_yyyymm', $v5)
- ->where('sn', $v2['number'])
- ->sum('degree');
- if ($v2['share'] == 1){
- $hotReturn = $hotReturn*$v2['percent'];
- }
- $newList[$k]['hotReturn'][] = $hotReturn;
- }
- }
- }
- }
- foreach ($newList as $k=> $v){
- if (!isset($v['cold'])){
- foreach ($date as $k1 => $v1) {
- $newList[$k]['cold'][] = 0;
- }
- }
- if (!isset($v['hotIn'])){
- foreach ($date as $k1 => $v1) {
- $newList[$k]['hotIn'][] = 0;
- }
- }
- if (!isset($v['hotReturn'])){
- foreach ($date as $k1 => $v1) {
- $newList[$k]['hotReturn'][] = 0;
- }
- }
- }
- return $newList;
- }
- //医院每日燃气用量统计
- public function dailyGas()
- {
- $month = input('start',date('Y-m'));
- $data = $this->dailyGasData($month);
- $this->assign('data',$data['res']);
- $this->assign('count',$data['count']);
- $this->assign('totalData',$data['total']);
- $this->assign('start',$month);
- $this->assign('date',date('Y年m月',strtotime($month)));
- return $this->fetch();
- }
- public function dailyGasData($month){
- $dep = getDay(strtotime($month));
- $lastDayOfLastMonth = date('Ymd', strtotime("-1 day", strtotime(date("Y-m-01", strtotime($month)))));
- $map[] = ['del','=',0];
- $map[] = ['org_id','=',$this->orgId];
- $sn = Db::name('energy_gas')
- ->where($map)
- ->where('enable',1)
- ->where('parent_id',0)
- ->column('number');
- $res = [];
- $total = 0;
- foreach ($dep as $k=>$v){
- $degree = 0;
- foreach ($sn as $kk =>$vv){
- $row = Db::name('energy_gas_record')
- ->where($map)
- ->where('read_yyyymmdd',$v)
- ->where('sn',$vv)
- ->field('sn,degree')
- ->find();
- $res[$k][$kk] = $row;
- if ($k > 0 && !empty($row)){
- //$res[$k][$kk]['real_degree'] = number_format(($res[$k][$kk]['degree'] - $res[$k-1][$kk]['degree']) ,2,'.','');
- $res[$k][$kk]['real_degree'] =sprintf("%.2f", ($res[$k][$kk]['degree'] - $res[$k-1][$kk]['degree'])) ;
- $degree += $res[$k][$kk]['real_degree'];
- }
- if($k == 0){
- $row2= Db::name('energy_gas_record')
- ->where($map)
- ->where('read_yyyymmdd',$lastDayOfLastMonth)
- ->where('sn',$vv)
- ->field('sn,degree')
- ->find();
- // $row2['degree'] = isset($row2['degree'])?$row2['degree']:0;
- // $res[$k][$kk]['real_degree'] = number_format(($res[$k][$kk]['degree'] - $row2['degree']) ,2,'.','');
- $res[$k][$kk]['real_degree'] = sprintf("%.2f", ($res[$k][$kk]['degree'] - $row2['degree']));
- $degree += $res[$k][$kk]['real_degree'];
- }
- }
- $res[$k]['total'] = sprintf('%.2f',$degree);
- $total+=$degree;
- }
- $total = sprintf('%.2f',$total);
- return ['res'=>$res,'total'=>$total,'count'=>count($sn)];
- }
- //科室月燃气用量统计
- public function monthDepGas()
- {
- $month = input('start', date('Y'));
- for ($i = 1; $i < 13; $i++) {
- $monthList[] = $i.'月份';
- }
- $data = $this->monthDepGasData($month);
- $this->assign('data', $data['newList']);
- $this->assign('count', $data['count']);
- $this->assign('total', $data['total']);
- $this->assign('monthList', $monthList);
- $this->assign('start', $month);
- // halt($data);
- return $this->fetch();
- }
- public function monthDepGasData($month)
- {
- $month = $month.'0101';
- for ($i = 1; $i < 13; $i++) {
- if ($i<10){
- $date[] = date('Y'.'0'.$i,strtotime($month));
- if ($i==1){
- $time = strtotime($date[0].'01');
- $lastDate[] = date('Ym',strtotime('-1 month',$time));
- }else{
- $lastDate[] = date('Y'.'0'.($i-1),strtotime($month));
- }
- }else{
- $date[] = date('Y'.$i,strtotime($month));
- if ($i==10){
- $lastDate[] = date('Y'.'0'.($i-1),strtotime($month));
- }else{
- $lastDate[] = date('Y'.($i-1),strtotime($month));
- }
- }
- }
- $map[] = ['del','=',0];
- $map[] = ['org_id','=',$this->orgId];
- $list = [];
- $dep = Db::name('energy_dep')
- ->where($map)
- ->where('enable',1)
- ->field('id,name,area,address')
- ->select();
- foreach ($dep as $item){
- $re = Db::name('energy_gas')
- ->Where($map)
- ->where('enable',1)
- ->Where('dep','like','%'.$item['id'].'%')
- ->select();
- if(!empty($re)){
- $list[] = $re;
- }
- }
- $newList = $this->getNewList($list);
- foreach ($newList as $k => $v){
- foreach ($v as $k2=>$v2){
- $address = json_decode($v2['address']);
- $dep_id = json_decode($v2['dep']);
- $newList[$k][$k2]['info']['floor1'] = Db::name('energy_area')->where('id',$address[1])->value('title');
- $newList[$k][$k2]['info']['floor2'] = Db::name('energy_area')->where('id',$address[2])->value('title');
- $newList[$k][$k2]['info']['dep'] = Db::name('energy_dep')->where('id',$dep_id[0])->value('name');
- foreach ($date as $k3=>$v3){
- $re = Db::name('energy_gas_record')
- ->field('sn,degree,read_yyyymm')
- ->where($map)
- ->where('read_yyyymm',$v3)
- ->where('sn',$v2['number'])
- ->find();
- $re2 = Db::name('energy_gas_record')
- ->field('sn,degree')
- ->where($map)
- ->where('read_yyyymm',$lastDate[$k3])
- ->where('sn',$v2['number'])
- ->find();
- if ($re['degree']){
- if ($v2['share'] == 1 || (string)$v2['share'] == '0'){
- $re['real_degree'] = $re['degree'] - $re2['degree']*$v2['percent'];
- }else{
- $re['real_degree'] = $re['degree'] - $re2['degree'];
- }
- }
- $newList[$k][$k2]['data'][] = $re;
- }
- }
- }
- $total = [];
- foreach ($date as $k=>$v){
- $degree = 0;
- foreach ($newList as $k2 => $v2){
- $count=0;
- foreach ($v2 as $k3=>$v3){
- if (!empty($v2[0]['data'][$k])){
- $count = $v2[0]['data'][$k]['real_degree'];
- }
- $degree+=$count;
- }
- $total[$k] = $degree;
- }
- }
- //halt($newList);
- return ['newList'=>$newList,'count'=>count($newList),'total'=>$total];
- }
- //对取到的数据进行整理,根据地址和科室进行分类整合
- public function getNewList($list)
- {
- //根据number进行分组
- $grouped_array = [];
- foreach ($list as $group) {
- foreach ($group as $item) {
- $number = $item['number'];
- // 如果这个number还没有分组,则创建一个新的分组
- if (!isset($grouped_array[$number])) {
- $grouped_array[$number] = [];
- }
- // 添加元素到对应的分组
- $grouped_array[$number][] = $item;
- }
- }
- $grouped_array = array_values($grouped_array);
- //分配比例
- foreach ($grouped_array as $k => $v){
- if (count($v)>1){
- $index = 0;
- foreach ($v as $k2=>$v2){
- if ($v2['share'] == 1){ //按比例分摊
- $dep = json_decode($v2['dep']);
- $percent = explode(':',$v2['percent']);
- $m = 0; //分母
- foreach ($percent as $k3=>$v3){
- $m +=$percent[$k3];
- }
- $p = sprintf("%.2f", $percent[$index]/$m);
- $grouped_array[$k][$k2]['percent'] = $p ;
- $grouped_array[$k][$k2]['dep'] = '['.$dep[$index].']' ;
- $index+=1;
- }
- if ((string)$v2['share'] == '0' ){ //按面积分摊
- $dep = json_decode($v2['dep']);
- $ids = [];
- foreach ($dep as $v3) {
- $ids[] = $v3;
- }
- $areas = Db::name('energy_dep')->where('id', 'in', $ids)->column('area', 'id');
- $m = 0;//分母
- foreach ($dep as $k3 => $v3) {
- $m += $areas[$v3];
- }
- $area = $areas[$dep[$index]];
- $p = sprintf("%.2f", $area/$m);
- $grouped_array[$k][$k2]['percent'] = $p ;
- $grouped_array[$k][$k2]['dep'] = '['.$dep[$index].']' ;
- $index+=1;
- }
- }
- }
- }
- // $modifiedArray = [];
- // // 遍历数组的每个子数组
- // foreach ($grouped_array as $firstKey => $subArray) {
- // foreach ($subArray as $secondKey => $item) {
- // // 解析 dep 字段
- // $deps = json_decode($item['dep'], true);
- // if (is_array($deps) && count($deps) > 1) {
- // // 如果 dep 包含多个元素,为每个元素创建新的数组项
- // foreach ($deps as $depValue) {
- // $newItem = $item; // 复制原数组项
- // $newItem['dep'] = json_encode([$depValue]); // 更新 dep 字段
- // // 直接替换掉原有的数组项
- // $modifiedArray[$firstKey][] = $newItem;
- //
- // }
- // } else {
- // $modifiedArray[$firstKey][] = $item;
- // }
- // }
- // }
- // 根据相同地址和科室组合电表
- $otherArrays = array_slice($grouped_array, 1);
- // 合并数组
- $list = array_merge($grouped_array[0], ...$otherArrays);
- // 初始化新数组
- $list2 = [];
- // 遍历原始列表,将每个项目添加到对应的地址和部门组合索引下
- foreach ($list as $item) {
- // 创建组合键
- $combinedKey = $item['address'] . '|' . $item['dep'];
- if (!isset($list2[$combinedKey])) {
- // 如果这个组合键还不存在,就创建一个新的分组
- $list2[$combinedKey] = [];
- }
- // 将项目添加到新数组的对应组合键下
- $list2[$combinedKey][] = $item;
- }
- $list2 = array_values($list2);
- //对数组进行去重操作
- $newList = [];
- foreach ($list2 as $subArray) {
- $processedSubArray = []; // 用于存储当前子数组处理后的结果
- $seen = []; // 用于记录已经见过的组合
- // 遍历子数组的每个项目
- foreach ($subArray as $item) {
- // 解析 dep 字段
- $dep = json_decode($item['dep'], true);
- // 创建一个用于识别的唯一键
- $uniqueKey = $item['number'] . '|' . implode(',', $dep);
- // 如果这个组合还没有被处理过
- if (!isset($seen[$uniqueKey])) {
- // 添加到当前处理后的子数组
- $processedSubArray[] = $item;
- // 标记这个组合为已处理
- $seen[$uniqueKey] = true;
- }
- }
- // 将处理后的子数组添加到处理后的数组
- $newList[] = $processedSubArray;
- }
- return $newList;
- }
- }
|