(2차질문)배열(array) 안에서 while나 for문을 사용하려면 어떻게 해야하나요? > 그누4 질문답변

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

(2차질문)배열(array) 안에서 while나 for문을 사용하려면 어떻게 해야하나요? 정보

(2차질문)배열(array) 안에서 while나 for문을 사용하려면 어떻게 해야하나요?

본문

1차질문 : http://sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=246570&page=2
1차 질문때, 균이님이 답변해주신 것을 토대로 다양한 형식으로 시도해 보았는데, 잘 되지 않아 다시 질문드립니다.
코딩에 필요한 정보를 추가하여 제가 의도하는 바를 문의드리오니, 아시는 분이 있으시다면 답변좀 꼭 부탁드립니다.
-------------------------------------------
우선 디비의 내용은 다음과 같습니다.

테이블 변수명 : $g4[menu_table]
필드명 -> id,  mn_type,  mn_subject,    mn_id,  mn_sort,      mn_url
필드값 ->  1    mmenu    메인메뉴1          1          0              url_1
                2    smenu    서브메뉴1-1        1          1              url_2
                3    smenu    서브메뉴1-2        1          2              url_3
                4    mmenu    메인메뉴2          2          0              url_4
                5    smenu    서브메뉴2-1        2          1              url_5
                6    smenu    서브메뉴2-2        2          2              url_6
                7    mmenu    메인메뉴3          3          0              url_7
                8    smenu    서브메뉴3-1        3          1              url_8 
                9    smenu    서브메뉴3-2        3          2              url_9
디비의 내용이 위처럼 저장되어 있다고 가정할 때,

웹페이지에서 보여지는 형태가
  메인메뉴1              메인메뉴2              메인메뉴3
  서브메뉴1-1          서브메뉴2-1          서브메뉴3-1
  서브메뉴1-2          서브메뉴2-2          서브메뉴3-2

위처럼 '메인메뉴1' 하위에 '서브메뉴1-1' 과 '서브메뉴1-2'가 연계되도록(상위메뉴 마우스오버시 하위메뉴 나타나게) 하는 형식으로 모든메뉴를 구현하려고 합니다.
그래서 아래와 같이 코딩을 해보았는데 잘 안되네요..ㅠㅠ
(자바스크립트, CSS는 생략)

(메뉴 내용 추출)
$rm = sql_query("select * from $g4[menu_table] where mn_type like 'mmenu' order by mn_id asc");
$mmenu = array();
for($i=1; $mm=sql_fetch_array($rm); $i++) {
$mmenu[$i] = array ("text" => "{$mm['mn_subject']}", "href" => "{$mm['mn_url']}" );

$rs = sql_query("select * from $g4[menu_table] where mn_id like '$i' and mn_type like 'smenu' order by mn_id asc, mn_sort asc");
for($j=1; $sm=sql_fetch_array($rs); $j++) {
$mmenu[$j][sub] = array ("text" => "{$sm['mn_subject']}", "href" => "{$sm['mn_url']}" );
  }
}

(메뉴 내용 표현)
<ul id="navigation">
 <?php
  $i=0;
  foreach($mmenu as $mkey => $mval) {
 ?>
  <li><a href="<?php echo $mval['href'];?>"><?php echo $mval['text'];?></a>
      <ul>
      <?php
      foreach($mmenu[$i][sub] as $skey => $sval) {
        echo "<li><a href=\"{$sval['href']}\">{$sval['text']}</a></li>";
      }
      $i++
      ?>
      </ul>
  </li>
 <?php } ?>
</ul>

어떻게 해야 위에서 의도한 대로 메뉴를 뽑아서 표현할 수 있을까요?

댓글 전체

for 문의 형식에 오류가 있네요.

for ($i = 0; $i < 원하는데이터의 갯수; $i++) 이런 형식이 되어야 합니다.

for($i=1; $mm=sql_fetch_array($rm); $i++)  그런데 형식에 맞지 않게 되어 있네요.

for문을 두군데 사용했는데 두군데 다 그렇게 사용했네요.

이 부분을 for문의 형식에 맞게 해 주세요.

그리고 위의 형식이라면 for 문보다는 while 문을 사용하는것이 더 나을 듯 하네요.
처음부터 위와 같이 질문 했다면 벌써 답변을 얻었을텐데요
쿼리를 두번 할 필요가 없습니다
mn_sort 필드가 0인 것인 메인메뉴라면 mn_type 필드는 필요없습니다

$rm = sql_query("select * from $g4[menu_table] order by mn_id,mn_sort");
$mn_num= -1;
for($i=0; $mm=sql_fetch_array($rm); $i++) {
if( $mn[mn_sort]== 0){
  $mn_num++;
  $main_menu[$mn_num] = array ("text" => "{$mm['mn_subject']}", "href" => "{$mm['mn_url']}" );
 $sub_menu[$mn_num]=array(); //--서브메뉴가 없는 경우 대비용
 }
else  $sub_menu[$mn_num][] = array ("text" => "{$sm['mn_subject']}", "href" => "{$sm['mn_url']}" );
 
}

////////////////
foreach($mmenu as $mkey => $mval) { <---수정
 foreach($main_menu as $mkey => $mval) {

foreach($mmenu[$i][sub] as $skey => $sval) {  <-- 수정
 foreach($sub_menu[$i] as $skey => $sval) {
존경하는 균이님, 정말 감사합니다.
알려주신대로 하니 정말 되는군요.
덕분에 제가 의도했던 바를 성공하였습니다.
정말 어떻게 감사를 드려야 할지 너무 감동입니다.^^

제가 부족하여 처음에 필요한 정보를 다 보여드리지 못해 번거롭게 해드린 점도 죄송하구요,,,,,
제가 이 문제로 거의 한달을 연구하고 고민해 왔는데, 균이님은 한방에 해결해 주시는 군요,,,
어떻게 이런 연산식을 생각해 낼 수 있는지, 균이님이 정말 존경스럽습니다.
그리고, 저같이 무지한 초보자를 위해 자상하게 답변해 주시는 균이님께 정말 감사하다는 말씀 재차 올립니다.

균이님께 새해에도 늘 행운이 함께 하기를 축원드립니다.
전체 66,558 |RSS
그누4 질문답변 내용 검색

회원로그인

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