테스트 사이트 - 개발 중인 베타 버전입니다

반복문 질문 드립니다. 채택완료

안녕하세요.

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

 

</p>

<p>$sql = "select mem_no from g5_member where status = 1";

    $rst = mysql_query($sql);</p>

<p>    for($i=0; $row=mysql_fetch_array($rst); ++$i){

        $sql2 = "SELECT * FROM TF_RANK_LIST('".$row['mem_no']."')";

        $rst2 = mysql_query($sql2);</p>

<p>        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."
";

    }</p>

<p>

 

위와 같이 일단 전체 회원의 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." "; 를 찍었을때 

{"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개

채택된 답변
+20 포인트

유저가 바뀔때마다 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." ";     }  

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

감사합니다!!!

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인

전체 질문 목록

🐛 버그신고