0

PHPに連想配列があります。コードは次のとおりです。

   $result = mysql_query("SELECT * FROM `tb_menu` ORDER BY id ASC");
$menu = array();
$menu_index = array();
while($row = mysql_fetch_assoc($result)){
  if($row['par'] == 0) {
    $menu[] = $row;
    $menu[sizeof($menu)-1]['child'] = array();
    $menu_index[$row['id']] = &$menu[sizeof($menu)-1];
  } else {
    $menu_index[$row['par']]['child'][] = $row;
    $menu_index[$row['id']] = &$menu_index[$row['par']]['child'][sizeof($menu_index[$row['par']]['child'])-1];
  }
}
/*print ( '<pre>' )  ;
        print_r ( $menu ) ; 
        print ( '</pre>' ) ; exit();*/
$smarty->assign('menu', $menu);

私は初心者なので、スマートに動作させることはできません。このようなマルチレベルメニューの作成を手伝ってください

<ul>
<li><a href="">first level</a>
    <ul>
        <li><a href="">second level</a></li>
          ......................................
            <ul>
                  <li><a href="">N-level</a></li>
            <ul>
    </ul>
</li>
</ul>
</li>

ありがとう

4

2 に答える 2

0
$menu= array(
                     'about' => 'url',
                     'contact' => 'url',
                     'service' =>array(
                                       'service1' => 'url',
                                       'service2' => 'url',
                                       'service3' => 'url',
                                       'service4' => 'url'),
                     'others'=>array(
                                     'other1' => 'url',
                                     'other2' =>'url',
                                     'other3' =>'url'),
                     'session'=>'url'
                      );

これは、Smarty3 テンプレートでこのマルチレベル配列を反復処理する方法の例です

<ul >
{foreach $menu as $value}
   {if $value|is_array}

        <li><a href="#" >{$value@key}</a>                        
         <ul>
            {foreach $value as $subvalue}

                <li><a href="#">{$subvalue@key}</a></li>

            {/foreach}
         </ul>
       </li>


   {else}

   <li><a href="{$value}">{$value@key|capitalize} </a></li>

    {/if}

{/foreach}
</ul>
于 2014-04-14T20:48:38.933 に答える
0

Smarty の最新バージョンでマルチレベル配列を反復処理する方法の例を次に示します。

<ul>
  {foreach $menu as $first_level}
    <li><a href="">first level</a></li>
  {/foreach}
  {if array_key_exists('child', $first_level)}
  <ul>
    {foreach $first_level['child'] as $second_level}
      <li><a href="">second level</a></li>
    {/foreach}
    {if array_key_exists('child', $second_level)}
    <ul>
       {foreach $second_level['child'] as $n_level}
         <li><a href="">N-level</a></li>
       {/foreach}
       <li><a href="">N-level</a></li>
    </ul>
    {/if}
  </ul>
  {/if} 
</ul>

これは再帰的ではないため、配列の深さを知っていることを前提としています...

再帰的なテンプレート作成に使用できるパターンへのリンクは次のとおりです: http://www.brain-dump.org/blog/entry/32

于 2013-07-30T22:19:12.890 に答える