DataHandlerService.php 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace App\Services\common;
  3. use App\Traits\ServiceAppAop;
  4. class DataHandlerService
  5. {
  6. use ServiceAppAop;
  7. protected $modelClass=DataHandler::class;
  8. public function dataHeader(array $mapKeys= [], $resultData =[]){
  9. $handlerData = [];
  10. $handlerData['mapkey'] = $mapKeys;
  11. if(!$resultData){return $handlerData;}
  12. foreach ($resultData as $data) {
  13. $key = $this->getKey($mapKeys,$data);
  14. $handlerData[$key] = $data;
  15. }
  16. return $handlerData;
  17. }
  18. /**
  19. * 只支持三层的寻找
  20. * @param array $mapKeyArr
  21. * @param array $resultData
  22. */
  23. public function dataHeaders(array $mapKeyArr = [], $resultData =[]){
  24. $handlerData_list = [];
  25. $level_1_key = $mapKeyArr[0][0] ?? false; unset($mapKeyArr[0][0]);
  26. $level_2_key = $mapKeyArr[1][0] ?? false; unset($mapKeyArr[1][0]);
  27. $level_3_key = $mapKeyArr[2][0] ?? false; unset($mapKeyArr[2][0]);
  28. $level_1_keys =$mapKeyArr[0] ?? false;
  29. $level_2_keys =$mapKeyArr[1] ?? false;
  30. $level_3_keys =$mapKeyArr[2] ?? false;
  31. if($level_1_key || $level_1_key==''){
  32. foreach ($resultData as $level_1_data) {
  33. if(!$level_1_keys){continue;}
  34. $key = $this->getKey($level_1_keys,$level_1_data);
  35. if($level_1_key==''){
  36. $level_2_data_list = $level_1_data;
  37. }else{
  38. $level_2_data_list = $level_1_data[$level_1_key];
  39. }
  40. if($level_2_key || $level_2_key==''){
  41. if(!$level_2_keys){continue;}
  42. foreach ($level_2_data_list as $level_2_data) {
  43. $key .= $this->getKey($level_2_keys, $level_2_data);
  44. $level_3_data_list = $level_2_data[$level_1_key];
  45. if ($level_3_key || $level_3_key=='') {
  46. if (!$level_3_keys) {
  47. continue;
  48. }
  49. foreach ($level_3_data_list as $level_3_data) {
  50. $key .= $this->getKey($level_3_keys, $level_3_data);
  51. $handlerData_list[$key] =$level_3_data;
  52. }
  53. }else{
  54. $handlerData_list[$key] =$level_2_data;
  55. }
  56. }
  57. }else{
  58. $handlerData_list[$key] =$level_1_data;
  59. }
  60. }
  61. }
  62. $handlerData['mapkey'] = array_merge($level_1_keys,$level_2_keys ?? [],$level_3_keys ?? []);
  63. return $handlerData_list ?? null;
  64. }
  65. private function getKey($keys,$object){
  66. $mapKey = '';
  67. foreach ($keys as $key){
  68. $objKey = $object[$key] ?? '';
  69. $mapKey .= $key.'='.$objKey;
  70. }
  71. return $mapKey;
  72. }
  73. public function getKeyValue($keyValues,&$data){
  74. $mapkeys = $data['mapkey'];
  75. $key = '';
  76. if(!$data){return null;}
  77. foreach ($mapkeys as $mapkey) {
  78. $key .=$mapkey.'='.$keyValues[$mapkey];
  79. }
  80. return $data[$key] ?? null;
  81. }
  82. }