반복문 질문 드립니다.

반복문 질문 드립니다.

QA

반복문 질문 드립니다.

본문

안녕하세요.

for문을 이용해서 내용을 implode로 원하는 형태로 출력하려고 합니다.

 


$sql = "select mem_no from g5_member where status = 1";
    $rst = mysql_query($sql);
    for($i=0; $row=mysql_fetch_array($rst); ++$i){
        $sql2 = "SELECT * FROM TF_RANK_LIST('".$row['mem_no']."')";
        $rst2 = mysql_query($sql2);
        for($j=0; $row2=mysql_fetch_array($rst2); ++$j){
            if(!$row2['mem_no'])
                continue;
            $status_class[] = '{"partnerId":'.$row2['mem_no'].',"rank":'.$row2['rank'].',"period":"'.$row2['period'].'"}';                        
        }        
        $status_class_arr = implode(',',$status_class);
        echo $status_class_arr."<br>";
    }

 

위와 같이 일단 전체 회원의 mem_id를 select해서 TF_RANK_LIST에 각 회원 mem_id를 

넣어 한번더 for를 돌려  

$status_class[] = '{"partnerId":'.$row2['mem_no'].',"rank":'.$row2['rank'].',"period":"'.$row2['period'].'"}';

이렇게 배열로 만들었습니다. 배열로 만든 이유는 회원별로 select되는 행이 1개 이상이 될 수도 있어서

implode를 하여

 

{"partnerId":100,"rank":1,"period":a},{"partnerId":200,"rank":2,"period":c}

{"partnerId":101,"rank":2,"period":b}

{"partnerId":102,"rank":3,"period":c},{"partnerId":202,"rank":4,"period":c},{"partnerId":302,"rank":5,"period":c}

 

이렇게 복수의 값을 ,로 구분하려고 하였습니다. 그런데 현제 TF_RANK_LIST에는 1행이상 select되는 회원이 없습니다. 그렇다면 echo $status_class_arr."<br>"; 를 찍었을때 

{"partnerId":100,"rank":1,"period":a}

{"partnerId":101,"rank":2,"period":b}

{"partnerId":102,"rank":3,"period":c}

이렇게 나와야 정상인데

{"partnerId":100,"rank":1,"period":a}

{"partnerId":100,"rank":1,"period":a},{"partnerId":101,"rank":1,"period":a}

{"partnerId":100,"rank":1,"period":a},{"partnerId":101,"rank":1,"period":a},{"partnerId":102,"rank":1,"period":a}~~~

이렇게 전체 회원수만큼 하나씩 덧붙혀져서 계속 반복이 돌다가 결국은 out of memory 문구를 띄우고

죽어버립니다.......

 

{"partnerId":100,"rank":1,"period":a},{"partnerId":200,"rank":2,"period":c}

{"partnerId":101,"rank":2,"period":b}

{"partnerId":102,"rank":3,"period":c},{"partnerId":202,"rank":4,"period":c},{"partnerId":302,"rank":5,"period":c}

이런식으로 한 회원이 가진 값 만큼만 나오게 하려면 어떤식으로 해야되나요?

 

이 질문에 댓글 쓰기 :

답변 1

유저가 바뀔때마다 array 초기화를 해주어야 합니다. $status_class = array();

 

$sql = "select mem_no from g5_member where status = 1";
    $rst = mysql_query($sql);
    for($i=0; $row=mysql_fetch_array($rst); ++$i){
        $sql2 = "SELECT * FROM TF_RANK_LIST('".$row['mem_no']."')";
        $rst2 = mysql_query($sql2);
        
        $status_class = array();
        for($j=0; $row2=mysql_fetch_array($rst2); ++$j){
            if(!$row2['mem_no'])
                continue;
            $status_class[] = '{"partnerId":'.$row2['mem_no'].',"rank":'.$row2['rank'].',"period":"'.$row2['period'].'"}';                        
        }        
        $status_class_arr = implode(',',$status_class);
        echo $status_class_arr."<br>";
    }
 

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

회원로그인

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