다중 for문 재문의..

다중 for문 재문의..

QA

다중 for문 재문의..

본문

1,540개의 연산을 858번 처리하도록 한 코드이고, 

1번~773번 까지는 정상 값

774번 부터 858번까지는 나올 수 없는 값이 출력됩니다.

 

제 똥컴에서는 이 루프문을 처리하는데 10~13초 걸리는데;; 비효율적인거 같기도하네요.

코드가 다소 못배운 티가 날 수도 있는데 양해 바라며..

 

 


<?php
//연산파트
 
$pool = range('a', 'v');
$len = count($pool); // $len = 22
//$res = [];
for($x=0; $x<$len; $x++) {
    for($y=$x+1; $y<$len; $y++) {
        for($z=$y+1; $z<$len; $z++) {
            $res[] = sprintf('%s%s%s', $pool[$x], $pool[$y], $pool[$z]);
        }
    }
}
$lottery_table = 'lottery_result';
$lottery_write_table = $g5['write_prefix'] .$lottery_table; 
$sql = " select * from $lottery_write_table order by wr_num asc ";
$result = sql_query($sql);
for($n=1; $win_row=sql_fetch_array($result); $n++) {
    
    for ($k=1; $k <= 6; $k++) {
        if($gr_a[0] == $win_row['wr_'.$k]) {  ${'a1'.$k.'_'.$n} = 1; } else if($gr_a[0] == $win_row['wr_7']) { ${'a11_'.$n} = 7; }
        if($gr_a[1] == $win_row['wr_'.$k]) {  ${'a2'.$k.'_'.$n} = 1; } else if($gr_a[1] == $win_row['wr_7']) { ${'a21_'.$n} = 7; }
        if($gr_b[0] == $win_row['wr_'.$k]) {  ${'b1'.$k.'_'.$n} = 1; } else if($gr_b[0] == $win_row['wr_7']) { ${'b11_'.$n} = 7; }
        if($gr_b[1] == $win_row['wr_'.$k]) {  ${'b2'.$k.'_'.$n} = 1; } else if($gr_b[1] == $win_row['wr_7']) { ${'b21_'.$n} = 7; }
        if($gr_c[0] == $win_row['wr_'.$k]) {  ${'c1'.$k.'_'.$n} = 1; } else if($gr_c[0] == $win_row['wr_7']) { ${'c11_'.$n} = 7; }
        if($gr_c[1] == $win_row['wr_'.$k]) {  ${'c2'.$k.'_'.$n} = 1; } else if($gr_c[1] == $win_row['wr_7']) { ${'c21_'.$n} = 7; }
        if($gr_d[0] == $win_row['wr_'.$k]) {  ${'d1'.$k.'_'.$n} = 1; } else if($gr_d[0] == $win_row['wr_7']) { ${'d11_'.$n} = 7; }
        if($gr_d[1] == $win_row['wr_'.$k]) {  ${'d2'.$k.'_'.$n} = 1; } else if($gr_d[1] == $win_row['wr_7']) { ${'d21_'.$n} = 7; }
        if($gr_e[0] == $win_row['wr_'.$k]) {  ${'e1'.$k.'_'.$n} = 1; } else if($gr_e[0] == $win_row['wr_7']) { ${'e11_'.$n} = 7; }
        if($gr_e[1] == $win_row['wr_'.$k]) {  ${'e2'.$k.'_'.$n} = 1; } else if($gr_e[1] == $win_row['wr_7']) { ${'e21_'.$n} = 7; }
        if($gr_f[0] == $win_row['wr_'.$k]) {  ${'f1'.$k.'_'.$n} = 1; } else if($gr_f[0] == $win_row['wr_7']) { ${'f11_'.$n} = 7; }
        if($gr_f[1] == $win_row['wr_'.$k]) {  ${'f2'.$k.'_'.$n} = 1; } else if($gr_f[1] == $win_row['wr_7']) { ${'f21_'.$n} = 7; }
        if($gr_g[0] == $win_row['wr_'.$k]) {  ${'g1'.$k.'_'.$n} = 1; } else if($gr_g[0] == $win_row['wr_7']) { ${'g11_'.$n} = 7; }
        if($gr_g[1] == $win_row['wr_'.$k]) {  ${'g2'.$k.'_'.$n} = 1; } else if($gr_g[1] == $win_row['wr_7']) { ${'g21_'.$n} = 7; }
        if($gr_h[0] == $win_row['wr_'.$k]) {  ${'h1'.$k.'_'.$n} = 1; } else if($gr_h[0] == $win_row['wr_7']) { ${'h11_'.$n} = 7; }
        if($gr_h[1] == $win_row['wr_'.$k]) {  ${'h2'.$k.'_'.$n} = 1; } else if($gr_h[1] == $win_row['wr_7']) { ${'h21_'.$n} = 7; }
        if($gr_i[0] == $win_row['wr_'.$k]) {  ${'i1'.$k.'_'.$n} = 1; } else if($gr_i[0] == $win_row['wr_7']) { ${'i11_'.$n} = 7; }
        if($gr_i[1] == $win_row['wr_'.$k]) {  ${'i2'.$k.'_'.$n} = 1; } else if($gr_i[1] == $win_row['wr_7']) { ${'i21_'.$n} = 7; }
        
        if($gr_j[0] == $win_row['wr_'.$k]) {  ${'j1'.$k.'_'.$n} = 1; } else if($gr_j[0] == $win_row['wr_7']) { ${'j11_'.$n} = 7; }
        if($gr_j[1] == $win_row['wr_'.$k]) {  ${'j2'.$k.'_'.$n} = 1; } else if($gr_j[1] == $win_row['wr_7']) { ${'j21_'.$n} = 7; }
        if($gr_k[0] == $win_row['wr_'.$k]) {  ${'k1'.$k.'_'.$n} = 1; } else if($gr_k[0] == $win_row['wr_7']) { ${'k11_'.$n} = 7; }
        if($gr_k[1] == $win_row['wr_'.$k]) {  ${'k2'.$k.'_'.$n} = 1; } else if($gr_k[1] == $win_row['wr_7']) { ${'k21_'.$n} = 7; }
        if($gr_l[0] == $win_row['wr_'.$k]) {  ${'l1'.$k.'_'.$n} = 1; } else if($gr_l[0] == $win_row['wr_7']) { ${'l11_'.$n} = 7; }
        if($gr_l[1] == $win_row['wr_'.$k]) {  ${'l2'.$k.'_'.$n} = 1; } else if($gr_l[1] == $win_row['wr_7']) { ${'l21_'.$n} = 7; }
        if($gr_m[0] == $win_row['wr_'.$k]) {  ${'m1'.$k.'_'.$n} = 1; } else if($gr_m[0] == $win_row['wr_7']) { ${'m11_'.$n} = 7; }
        if($gr_m[1] == $win_row['wr_'.$k]) {  ${'m2'.$k.'_'.$n} = 1; } else if($gr_m[1] == $win_row['wr_7']) { ${'m21_'.$n} = 7; }
        if($gr_n[0] == $win_row['wr_'.$k]) {  ${'n1'.$k.'_'.$n} = 1; } else if($gr_n[0] == $win_row['wr_7']) { ${'n11_'.$n} = 7; }
        if($gr_n[1] == $win_row['wr_'.$k]) {  ${'n2'.$k.'_'.$n} = 1; } else if($gr_n[1] == $win_row['wr_7']) { ${'n21_'.$n} = 7; }
        if($gr_o[0] == $win_row['wr_'.$k]) {  ${'o1'.$k.'_'.$n} = 1; } else if($gr_o[0] == $win_row['wr_7']) { ${'o11_'.$n} = 7; }
        if($gr_o[1] == $win_row['wr_'.$k]) {  ${'o2'.$k.'_'.$n} = 1; } else if($gr_o[1] == $win_row['wr_7']) { ${'o21_'.$n} = 7; }
        if($gr_p[0] == $win_row['wr_'.$k]) {  ${'p1'.$k.'_'.$n} = 1; } else if($gr_p[0] == $win_row['wr_7']) { ${'p11_'.$n} = 7; }
        if($gr_p[1] == $win_row['wr_'.$k]) {  ${'p2'.$k.'_'.$n} = 1; } else if($gr_p[1] == $win_row['wr_7']) { ${'p21_'.$n} = 7; }
        if($gr_q[0] == $win_row['wr_'.$k]) {  ${'q1'.$k.'_'.$n} = 1; } else if($gr_q[0] == $win_row['wr_7']) { ${'q11_'.$n} = 7; }
        if($gr_q[1] == $win_row['wr_'.$k]) {  ${'q2'.$k.'_'.$n} = 1; } else if($gr_q[1] == $win_row['wr_7']) { ${'q21_'.$n} = 7; }
        if($gr_r[0] == $win_row['wr_'.$k]) {  ${'r1'.$k.'_'.$n} = 1; } else if($gr_r[0] == $win_row['wr_7']) { ${'r11_'.$n} = 7; }
        if($gr_r[1] == $win_row['wr_'.$k]) {  ${'r2'.$k.'_'.$n} = 1; } else if($gr_r[1] == $win_row['wr_7']) { ${'r21_'.$n} = 7; }
        
        if($gr_s[0] == $win_row['wr_'.$k]) {  ${'s1'.$k.'_'.$n} = 1; } else if($gr_s[0] == $win_row['wr_7']) { ${'s11_'.$n} = 7; }
        if($gr_s[1] == $win_row['wr_'.$k]) {  ${'s2'.$k.'_'.$n} = 1; } else if($gr_s[1] == $win_row['wr_7']) { ${'s21_'.$n} = 7; }
        if($gr_t[0] == $win_row['wr_'.$k]) {  ${'t1'.$k.'_'.$n} = 1; } else if($gr_t[0] == $win_row['wr_7']) { ${'t11_'.$n} = 7; }
        if($gr_t[1] == $win_row['wr_'.$k]) {  ${'t2'.$k.'_'.$n} = 1; } else if($gr_t[1] == $win_row['wr_7']) { ${'t21_'.$n} = 7; }
        if($gr_u[0] == $win_row['wr_'.$k]) {  ${'u1'.$k.'_'.$n} = 1; } else if($gr_u[0] == $win_row['wr_7']) { ${'u11_'.$n} = 7; }
        if($gr_u[1] == $win_row['wr_'.$k]) {  ${'u2'.$k.'_'.$n} = 1; } else if($gr_u[1] == $win_row['wr_7']) { ${'u21_'.$n} = 7; }
        
        if($gr_v[0] == $win_row['wr_'.$k]) {  ${'v1'.$k.'_'.$n} = 1; } else if($gr_v[0] == $win_row['wr_7']) { ${'v11_'.$n} = 7; }
        if($gr_v[1] == $win_row['wr_'.$k]) {  ${'v2'.$k.'_'.$n} = 1; } else if($gr_v[1] == $win_row['wr_7']) { ${'v21_'.$n} = 7; }
    }
    
    for ($i=0; $i <= count($res); $i++) {
        
        switch(${$res[$i][0].'11_'.$n}+${$res[$i][0].'12_'.$n}+${$res[$i][0].'13_'.$n}+${$res[$i][0].'14_'.$n}+${$res[$i][0].'15_'.$n}+${$res[$i][0].'16_'.$n}+
               ${$res[$i][0].'21_'.$n}+${$res[$i][0].'22_'.$n}+${$res[$i][0].'23_'.$n}+${$res[$i][0].'24_'.$n}+${$res[$i][0].'25_'.$n}+${$res[$i][0].'26_'.$n}+
               ${$res[$i][1].'11_'.$n}+${$res[$i][1].'12_'.$n}+${$res[$i][1].'13_'.$n}+${$res[$i][1].'14_'.$n}+${$res[$i][1].'15_'.$n}+${$res[$i][1].'16_'.$n}+
               ${$res[$i][1].'21_'.$n}+${$res[$i][1].'22_'.$n}+${$res[$i][1].'23_'.$n}+${$res[$i][1].'24_'.$n}+${$res[$i][1].'25_'.$n}+${$res[$i][1].'26_'.$n}+
               ${$res[$i][2].'11_'.$n}+${$res[$i][2].'12_'.$n}+${$res[$i][2].'13_'.$n}+${$res[$i][2].'14_'.$n}+${$res[$i][2].'15_'.$n}+${$res[$i][2].'16_'.$n}+
               ${$res[$i][2].'21_'.$n}+${$res[$i][2].'22_'.$n}+${$res[$i][2].'23_'.$n}+${$res[$i][2].'24_'.$n}+${$res[$i][2].'25_'.$n}+${$res[$i][2].'26_'.$n}
               ) {
            case '3'        : ${'comb'.$n.$i} = '5등'; break;
            case '10'        : ${'comb'.$n.$i} = '5등'; break;
            case '4'        : ${'comb'.$n.$i} = '4등'; break;
            case '11'        : ${'comb'.$n.$i} = '4등'; break;
            case '5'        : ${'comb'.$n.$i} = '3등'; break;
            case '12'        : ${'comb'.$n.$i} = '2등'; break;
            case '6'        : ${'comb'.$n.$i} = '1등'; break;
            default        : ${'comb'.$n.$i} = ''; break;
        }
    }
}
?>
<?php
//출력파트

                          
                          $lottery_table = 'lottery_result';
                          $lottery_write_table = $g5['write_prefix'] .$lottery_table; 
                          $sql = " select * from $lottery_write_table order by wr_num asc ";
                          $result = sql_query($sql);
                          for($n=1; $win_row=sql_fetch_array($result); $n++) {
                              ${'comb_arr'.$n} = array();
                              echo $win_row['wr_8']. '회 - ';
                              for ($i=1; $i <= count($res); $i++) {
                                  array_push(${'comb_arr'.$n}, ${'comb'.$n.$i});
                              }
                                sort(${'comb_arr'.$n});
                                ${'comb_arr2_'.$n} = array_filter(${'comb_arr'.$n});
                                ${'num'.$n} = array_count_values(${'comb_arr2_'.$n});
                             
                                 foreach( ${'num'.$n} as $key => $value ){
                                    
                                    switch($key) {
                                        case '5등'        : $grade_color = 'darkgray'; break;
                                        case '4등'        : $grade_color = 'yellow'; break;
                                        case '3등'        : $grade_color = 'green'; break;
                                        case '2등'        : $grade_color = 'blue'; break;
                                        case '1등'        : $grade_color = 'red'; break;
                                        default        : $grade_color = ''; break;
                                  }
                         
                         ?>
                             <span class="bold label bg-<?php echo $grade_color; ?>"><?php echo $key; ?></span> <?php echo $value; ?>개
                         <?php } ?><br />
                         <?php } ?>

 

이 질문에 댓글 쓰기 :

답변 1

1540개가 작동되는건

 

$pool = range('a', 'v');
$len = count($pool); // $len = 22
//$res = [];
for($x=0; $x<$len; $x++) {
    for($y=$x+1; $y<$len; $y++) {
        for($z=$y+1; $z<$len; $z++) {
            $res[] = sprintf('%s%s%s', $pool[$x], $pool[$y], $pool[$z]);
            echo $pool[$x]."-".$pool[$y]."-".$pool[$z]."<br>";
        }
    }
}

 

이것으로 확인가능합니다.

 

아래의 

 

for($n=1; $win_row=sql_fetch_array($result); $n++) {

 

이 내용은 DB의 값에 따라 작동하므로

 

위에서 질문하신 내용은 DB를 확인해보셔야 합니다.

네 DB도 몇 번을 들여다 봤는데 858행의 테이블이 존재하고, 데이타도 정상입니다.
for ($i=0; $i <= count($res); $i++) {  이부분은 소스 취합중에 수정한 것인데
$i=1 로 하고 $res[$i-1] 으로 처리했을때 773번 기점으로 정상 비정상이 구분되고, 본문에 작성한 것처럼
$i=0 으로 하고 $res[$i]로 처리했을때는 1번부터 773번 사이에도 띄엄띄엄
결과 값이 달리 출력되네요.
좀 더 살펴봐야겠네요. 말씀 감사합니다.

헛 뭔가 원인을 찾은거 같습니다.
DB 호출시 wr_num을 기준으로 한것이 문제같아요.
글이 작성되고 삭제되고 다시 작성되는 과정에서 wr_num 값 일부가
전체 행수를 초과하는 값을 가지고 있어서인듯 합니다.
또는 wr_num과 wr_parent 값이 불일치하는 값이 있어서일수도 있겠네요.
======
에고.. DB 지우고 엑셀로 일괄 재등록 했는데 동일하네요.. 연산쪽에 문제가 있는가봅니다.

잘 찾으셨다니 다행이네요

wr_num 과 wr_parent 는 전혀 다른 값을 갖는구조인것은 맞습니다.

잠자리 들기전에 답변드린것이라서 위의 for문에서 정상적인 갯수가 출력되는것 확인하고 답드린것이었네요

답변을 작성하시기 전에 로그인 해주세요.
전체 59,285
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT