2016-10-31 3 views
1

PHP에 관한 현재 지식이 있습니다. 정보가 데이터베이스에 저장되는 메뉴를 만들고 싶습니다. 내가 원하는 것은 다음과 같습니다 :while 및 foreach 루프가있는 메뉴

<?php 
$names= array(); 
$aliases= array(); 
$items = array(); 
?> 
<?php while($row = mysqli_fetch_array($menu, MYSQLI_ASSOC)){ 
    $names[] = $row['page']; 
    $aliases[] = $row['alias']; 
    $items[] = $row['item']; 
}?> 

<div id="menu"> 
    <ul> 
     <?php foreach($names as $page_name){ 
      <a href="*** HERE THE ALIAS CORRESPONDING WITH THE NAME***"><?php echo $page_name;?></a> 
     ?> 
     *** IF THERE ARE SUB MENU ITEMS, SHOW THEM *** 
     <ul> 
      <li> 
       <a href="*** ALIAS OF SUB ITEM ****">*** NAME OF SUB ITEM***</a> 
      </li> 
     </ul> 
    </ul> 
</div> 

나는 올바른 패드에 있는지 전혀 모른다. foreach는 이름이나 별칭에 대해서만 잘 작동하지만, 나는 그들을 일종의 결합 싶어요. 그럼 난 호버에 대한 하위 메뉴가 있는지 확인하고 싶지만 클래스 "활성"에 부모 항목을 설정합니다.

영어로 설명하기가 어렵 기 때문에 더 많은 정보를 제공 할 수 있도록 필요한 질문을하십시오.

미리 감사드립니다.

+0

더 많은 정보를 제공하시기 바랍니다, 다음과 같은 방법으로 전체 메뉴를 표시합니다. 우리는 "하위 메뉴"가 무엇인지, 또는 페이지가 어떻게 보이길 기대하는지 모릅니다. – SOFe

+0

페이지의 정적 항목과 코드를 공유 할 수 있습니까? 예로서. –

답변

1

우선, 세 가지 배열이 필요하지 않으며 배열은 $names이면 충분합니다. 둘째, 이름, 별명과 하위 항목으로 포함하는 다차원 배열을 만들 때, 다음과 같은 방법으로

while($row = mysqli_fetch_array($menu, MYSQLI_ASSOC)){ 
    $names[] = array('page_name' => $row['page'], 'alias' => $row['alias'], 'item' => $row['item']); 
} 

이 당신의 while() 루프를 변경합니다.

그리고 마지막으로는,

<div id="menu"> 
    <ul> 
     <?php foreach($names as $page_array){ ?> 
      <a href="<?php echo $page_array['alias']; ?>"><?php echo $page_array['page_name']; ?></a> 
      <?php 
       if(!empty($page_array['item'])){ 
        ?> 
        <ul> 
         <li> 
          <a href="<?php echo $page_array['item']; ?>"><?php echo $page_array['item']; ?></a> 
         </li> 
        </ul> 
        <?php 
       } 
     } ?> 
    </ul> 
</div> 
+0

다차원 배열 나는이 새로운 것을 좋아합니다. 그것은 매력처럼 작동하고 있습니다. 불행히도 저는 다른 해결책으로 올바른 방향으로 가고 있었으므로 그것을 구현하지는 않을 것입니다. 그러나 맞습니다. 그렇습니다. – Saypontigohe

+0

@Saypontigohe 기꺼이 도와 드리겠습니다. * 건배! -) * –

1
당신과 복잡함을하는

가지 :

<?php 

echo '<div id="menu"> 
     <ul>'; 
while($row = mysqli_fetch_array($menu, MYSQLI_ASSOC)){ 
    $names[] = $row['page']; 
    $aliases[] = $row['alias']; 
    $items[] = $row['item']; 

    echo '<li class="pagename"><a href="'.$row['alias'].'">'.$row['page'].'</a>'; 

    if ('checkforsubitem') { 
     echo '<ul> 
       <li> 
        <a href="'.$row['alias_subitem'].'">'.$row['name_of_subitem'].'</a> 
       </li> 
      </ul>'; 
    } 
} 
    echo '</li> 
    </ul> 
</div>'; 

?> 

그러나,이 하위 메뉴 비트에 대한 몇 가지 가정합니다. 일반적으로 동일한 검색어 내에서 해당 항목을 가져와 $row을 통해 사용할 수 있지만 $row['id'] 또는 그 밖의 항목의 연결을 기반으로 해당 항목에 대해 별도로 쿼리 할 수 ​​있으며 해당 항목을 가져와 id를 입력하고 보조 <li> -items 주위로 또 다른 while -loop을 실행하십시오.

+0

당신이 내 질문을 이해하게되어 기쁩니다. 하지만 지금 비슷한 코드를 실행하고 있습니다. 부모는 자식이 활성 페이지에 있는지 여부를 모르기 때문에 부모를이 방법으로 활성화하는 것은 불가능하다고 들었습니다. – Saypontigohe

+0

어, 뭐라구? 그 부모/자식 관계는 약간의 작업이 필요하거나 코드 문제 또는 데이터베이스 문제가 혼합되어 있습니다. 데이터베이스에서 전체 메뉴를 가져 오는 중이므로 관계가 데이터베이스에 있어야하며 올바르게 가져 오는 데 아무런 문제가 없어야합니다. – junkfoodjunkie

+0

지금은 메뉴에있는 경우 "true"를 저장하고 하위 항목 인 경우 "[parent of name]"을 저장하는 "item"이라는 필드가 있습니다. 아이에게는 부모가 있다는 것을 알고 있지만, 부모는 아이가 그것을 모르는 것입니다. 다음은 데이터베이스에서 잘못된 구조입니까? – Saypontigohe

관련 문제