코딩 공부/PHP

[PHP] - 날짜 기준으로 연관배열 합치기 -2. 연관배열 합치기

hg_96 2022. 5. 10. 11:47
private function makeSumData2deep($dataArr0, $dataArr1, $criteriaData, $dataArrSum, $extractDataArr=[]) {

        foreach ($dataArrSum as $key => $val) {
            foreach ($dataArr0 as $key0 => $val0) {

                if($val0[$criteriaData] == $dataArrSum[$key][$criteriaData]){

                    if ($extractDataArr==[]) {
                        foreach ($val0 as $key0_0 => $val0_0) {
                            $dataArrSum[$key][$key0_0] = $val0_0;
                        }
                    } else {
                        foreach ($val0 as $key0_1 => $val0_1) {
                            foreach ($extractDataArr as $key2 => $val2) {
                                if ($key0_1 == $val2) {
                                    $dataArrSum[$key][$key0_1] = $val0_1;
                                }
                            }
                        }

                    }
                }

                if ($extractDataArr==[]) {
                    foreach ($val0 as $key0_0 => $val0_0) {
                        if(empty($dataArrSum[$key][$key0_0])) {
                            $dataArrSum[$key][$key0_0] = 0;
                        }
                    }
                } else {
                    foreach ($val0 as $key0_0 => $val0_0) {
                        foreach ($extractDataArr as $key2 => $val2) {
                            if(empty($dataArrSum[$key][$val2])) {
                                $dataArrSum[$key][$val2] = 0;
                            }
                        }
                    }
                }

            }

            foreach ($dataArr1 as $key1 => $val1) {

                if($val1[$criteriaData] == $dataArrSum[$key][$criteriaData]){

                    if ($extractDataArr==[]) {
                        foreach ($val1 as $key1_0 => $val1_0) {
                            $dataArrSum[$key][$key1_0] = $val1_0;
                        }
                    } else {
                        foreach ($val1 as $key1_1 => $val1_1) {
                            foreach ($extractDataArr as $key2 => $val2) {
                                if ($key1_1 == $val2) {
                                    $dataArrSum[$key][$key1_1] = $val1_1;
                                }
                            }
                        }

                    }
                }

                if ($extractDataArr==[]) {
                    foreach ($val1 as $key1_0 => $val1_0) {
                        if(empty($dataArrSum[$key][$key1_0])) {
                            $dataArrSum[$key][$key1_0] = 0;
                        }
                    }
                } else {
                    foreach ($val1 as $key1_0 => $val1_0) {
                        foreach ($extractDataArr as $key2 => $val2) {
                            if(empty($dataArrSum[$key][$val2])) {
                                $dataArrSum[$key][$val2] = 0;
                            }
                        }
                    }
                }

            }

        }

        return $dataArrSum;
    }

개발스토리

지금 현재 foreach 문을 너무 많이 돌아서 성능이 당연히 안나와서 나중에 고칠계획이다.

주요 로직은 foreach를 돌면서 $criteriaData 의 키를 기준으로 $dataArr0, $dataArr1에 접근해서 키의 값이 같다면 데이터를 가져와서 $dataArrSum에 합치고 다합치고 나면 $dataArr0, $dataArr1를 돌면서 $dataArrSum에 키가 없다면 0으로 채워준다

 

그리고 여기에서 하나 욕심낸 부분이 데이터를 그냥 합치는 것이 아니라 원하는 키만 합치는 기능도 넣었다

$extractDataArr 이매개변수인데 이부분에 합치고 싶은 키들을 배열로 던지면 키가 같은 애들만 합쳐준다