(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>
어떻게 해야 위에서 의도한 대로 메뉴를 뽑아서 표현할 수 있을까요?
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 문을 사용하는것이 더 나을 듯 하네요.
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) {
쿼리를 두번 할 필요가 없습니다
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) {
존경하는 균이님, 정말 감사합니다.
알려주신대로 하니 정말 되는군요.
덕분에 제가 의도했던 바를 성공하였습니다.
정말 어떻게 감사를 드려야 할지 너무 감동입니다.^^
제가 부족하여 처음에 필요한 정보를 다 보여드리지 못해 번거롭게 해드린 점도 죄송하구요,,,,,
제가 이 문제로 거의 한달을 연구하고 고민해 왔는데, 균이님은 한방에 해결해 주시는 군요,,,
어떻게 이런 연산식을 생각해 낼 수 있는지, 균이님이 정말 존경스럽습니다.
그리고, 저같이 무지한 초보자를 위해 자상하게 답변해 주시는 균이님께 정말 감사하다는 말씀 재차 올립니다.
균이님께 새해에도 늘 행운이 함께 하기를 축원드립니다.
알려주신대로 하니 정말 되는군요.
덕분에 제가 의도했던 바를 성공하였습니다.
정말 어떻게 감사를 드려야 할지 너무 감동입니다.^^
제가 부족하여 처음에 필요한 정보를 다 보여드리지 못해 번거롭게 해드린 점도 죄송하구요,,,,,
제가 이 문제로 거의 한달을 연구하고 고민해 왔는데, 균이님은 한방에 해결해 주시는 군요,,,
어떻게 이런 연산식을 생각해 낼 수 있는지, 균이님이 정말 존경스럽습니다.
그리고, 저같이 무지한 초보자를 위해 자상하게 답변해 주시는 균이님께 정말 감사하다는 말씀 재차 올립니다.
균이님께 새해에도 늘 행운이 함께 하기를 축원드립니다.