2016-10-31 9 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

まず、3つの異なる配列は必要ありません。$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 Glad私が手伝ってくれました。乾杯! - )* –

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を入力し、別のwhile -loopを実行して、<li> -itemsのセカンダリを囲みます。

+0

私はあなたが私の質問を理解してうれしいです。しかし、私は今のところ同様のコードを実行していますが、親が子供がアクティブなページにいるかどうかわからないので、この方法で親をアクティブにすることは不可能であると言われています。 – Saypontigohe

+0

どういうこと?その親子関係には何らかの作業が必要な場合や、コードの問題やデータベースの問題が混在する場合があります。データベースからメニュー全体を取得しているので、関係はデータベース内にある必要があり、正しくフェッチするには問題はありません。 – junkfoodjunkie

+0

今、メニューにある場合は「true」、サブ項目の場合は「[親の名前]」を格納する項目「item」というフィールドがあります。子供は親を持っていることを知っていますが、親はそれが子供でな​​いことを知りません。これはデータベースの構造が間違っていますか? – Saypontigohe

関連する問題