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으로 주었다

일간

(특정기간의 데이터를 들고오고 싶다면 LIMIT이 아니라 where절에서 기간을 조절해야한다)

SELECT 

DATE_FORMAT(your_date, '%Y%m%d') AS '날짜', 

 

FROM `YOURTABLE

WHERE `your_date` >= '일주일전날짜(20220503)' and `your_date` <= '오늘 날짜(20220510)'

GROUP BY DATE_FORMAT(your_date, '%Y%m%d') ORDER BY `날짜` DESC

 

 

주간

(내가 인식하는 1주일은 월요일에서 시작해서 일요일에 끝이난다고 생각해서 이렇게 만들었다)

SELECT 

DATE_FORMAT(DATE_SUB(your_date, INTERVAL (DAYOFWEEK(your_date)-2) DAY), '%Y%m%d') AS '시작날짜', 

DATE_FORMAT(DATE_SUB(your_date, INTERVAL (DAYOFWEEK(your_date)-8) DAY), '%Y%m%d') AS '끝날짜', 

 

FROM `YOURTABLE` 

GROUP BY `시작날짜`, `끝날짜` 

ORDER BY `시작날짜` DESC LIMIT 4

 

 

월간

(월간데이터는 where 절로 처리하지 않은 이유는 일간데이터처럼 데이터가 비어있는 경우가 없다 시피해서 select에서 처리했다 월간데이터도 비어있는 경우가 있다면 WHERE 절에서 처리하는것이 맞다)

SELECT 

DATE_FORMAT(your_date, '%Y%m') AS `날짜`, 

 

FROM `YOURTABLE`

GROUP BY DATE_FORMAT(your_date, '%Y%m')

ORDER BY `날짜` DESC LIMIT 12

 

 

# 변수 사용

# 전역 변수
c = 1

def plus5(a, b):
    # 전역변수를 변경하겠다고 선언
    global c
    c = 5
    result = a + b + c
    return result

결과 = plus5(2, 5)

# 함수안의 변수를 지유롭게 사용하는 방법
def fn():
    a1 = 11 # 지역변수

    def fn2():
        # 지역변수사용
        nonlocal a1
        a1 = a1 + 5
        return a1

    # a2 = fn2()
    # return a2

    # 매개변수의 활용
    def fn3(num):
        a1 = num + 5
        return a1

    a3 = fn3(a1)
    return a3


결과2 = fn()
# 자료형 집합

집합1 = set([1,2,3,4,5]);
집합2 = set("안녕하세요 반갑습니다요");
집합2_1 = list(집합2);

집합3 = set("안녕하세요 처음뵙겠습니다");

# 교집합
교집합 = 집합2 & 집합3
교집합2 = 집합2.intersection(집합3)

# 합집합
합집합 = 집합2 | 집합3
합집합2 = 집합2.union(집합3)

# 차집합
차집합 = 집합2 - 집합3

# 값 추가
값추가 = 집합1.add(8)
값추가2 = 집합1.update([7,9])

# 특정 값 제거
값제거 = 집합1.remove(2)

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

파이썬 공부 로드맵 메모  (0) 2022.05.11
파이썬 - 변수사용  (0) 2022.04.18
파이썬 - 딕셔너리  (0) 2022.04.15
파이썬 - 배열  (0) 2022.04.14
파이썬 - 문자열  (0) 2022.04.11

// 1. 상위 제어 체크박스가 있다
// 2. 상위 제어에 따라 전체 선택 해제가 되는 하위체크박스 그룹이 있다
// (각 상위 체크박스는 하나의 하위체크박스 그룹이 있음)
// 3. 하위 체크박스의 선택에 따라 상위 체크박스를 변경한다
// 예시 상위 체크박스에는 포유류, 조류가 있고
// 포유류에는 [ 원숭이, 사자, 호랑이, 표범, 코끼리, 기린 ] 이있다
// 조류에는 [ 닭, 벌새, 까치, 까마귀, 참새, 비둘기 ] 가 있다
// 1. 여기서 원숭이를 선택하면 포유류와 원숭이가 선택되고 사자를 선택하면 사자가 선택된다
// 다른 항목인 닭을 선택하게 되면 포유류, 원숭이, 사자에 체크가 해제되고 조류, 닭이 선택된다
// 2. 원숭이, 사자, 호랑이를 선택하면 포유류, 원숭이, 사자, 호랑이에 선택되고
// 여기서 조류를 선택하면 이전의 포유류 선택이 해제되고 조류가 선택된다
// 이러한 구조를 지닌 로직을 만들어보자


// 상위 체크박스에 실행한다
function checkbox1 (otherName, otherAll) {
    let checkboxes = document.querySelectorAll(`input[name="${otherName}"]`);
    document.getElementById(otherAll).checked = false;

    checkboxes.forEach((checkbox) => {
        checkbox.checked = false;
    });
}

// 하위 체크박스에 실행한다
function checkbox2 (otherName, usAll, otherAll) {
    let checkboxes = document.querySelectorAll(`input[name="${otherName}"]`);
    document.getElementById(usAll).checked = true;

    if(document.getElementById(otherAll).checked){

        document.getElementById(otherAll).checked = false;
        checkboxes.forEach((checkbox) => {
            checkbox.checked = false;
        });
    }
}

+ Recent posts