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 이매개변수인데 이부분에 합치고 싶은 키들을 배열로 던지면 키가 같은 애들만 합쳐준다

 

 
private function makeArrDateData ($dateVal, $interval, $makeKey, $time) {

        $i = 0;
        if ($interval == "month") {
            while ($i < $dateVal) {

                $dateTime = date("Ym",strtotime("-".$i." ".$interval, strtotime($time)));
                $dataArrSum[$i][$makeKey] = $dateTime;
                $i += 1;
            }
        } else {
            while ($i < $dateVal) {

                $dateTime = date("Ymd",strtotime("-".$i." ".$interval, strtotime($time)));
                $dataArrSum[$i][$makeKey] = $dateTime;
                $i += 1;
            }
        }

        return $dataArrSum;
    }
 
 

개발스토리

날짜를 기준으로 뿌려줘야하는데 데이터를 들고와보니 데이터가 날짜별로 모두 채워져있다면 좋았겠지만 데이터가 들쭉날쭉했다 여러테이블에서 가져오다보니 쿼리문도 여러개가 나가서 여러개의 데이터를 합쳐야하는 상황이었다 그나마 데이터가 잘 들어간 데이터를 기준으로 합치려고 시도했지만 만약 이데이터중 하나라도 빠져있는데 다른 데이터는 데이터가 있다면 해당날짜의 데이터가 누락되는 대참사가 벌어진다.. 

결국 열심히 쓴 코드는 과감하게 버리고 날짜가 온전히 다들어간 연관배열이 필요했다.

해당 함수는 원하는 길이만큼 $dateVal에 int형을 주고

$interval 에 날짜간의 간격을 지정해주면된다 일일데이터의 경우 day를 주간의 경우 week를

$makeKey 에 지정하고싶은 연관배열의 이름을 주면된다 

$time에는 처음 시작할 날짜형식을 주면된다 나는 날짜형식을 20200510으로 주었다

preg_replace("/([0-9]{2,3})([0-9]{3,4})([0-9]{4})$/","\\1-\\2-\\3" ,$phone);
 
이렇게 사용하면 02로 시작하는 두글자와 010으로 시작하는 세글자까지 하이픈을 넣을 수 있다

 

		// sql 오류시 리다이렉트
		if (empty($data)) {
			redirect(base_url()."이동할 주소");
		}

 

// 방법 1
"가나다라<? echo $변수명 ?>마바사" 

// 방법 2 
"가나다라".<? echo $변수명 ?>."마바사"

// 방법 3
"가나다라{$변수명}마바사"

 

 

'코딩 공부 > PHP' 카테고리의 다른 글

[php] - 전화번호 하이픈 추가  (0) 2022.02.28
php 리다이렉트  (0) 2022.01.07
PHP array_slice 사용법  (0) 2021.12.28
php - post값 중 일부 문자열로 잘라서 데이터 전송  (0) 2021.12.22
php - strftime format  (0) 2021.12.06
array_slice
array_slice(배열, 시작위치, 자를길이)

// 예
array_slice(array, -4, 4);
// 결과 뒤에서 4개만 잘라서 가져온다​

+ Recent posts