1

配列をメニューとして表示したいと思います。配列が 1 次元の場合は簡単です。for ループを使用して簡単に生成できます。しかし今、私のメニュー配列は次のようになります。

$menu = array("item1", "item2", "item3" => array("subitem1", "subitem2", "subitem3"), "item4", "item5", "item6"); // hope it's defined coreectly

したがって、メイン配列 $menu に item1 や item5 のような単一の要素がある場合、それをプレーンとして表示したいと思います

  • タグですが、item3 のようにこれらの要素の 1 つが内部要素を持っている場合は、それを

    <li>item3
    <ul>
    <li>subitem1</li>
    <li>subitem2</li>
    <li>subitem3</li>
    </ul>
    </li>
    

    for ループ内で for ループを使用する必要があると思いますが、おそらくもっと簡単な方法があります。

    よろしく、よろしくお願いしますマット

    4

    3 に答える 3

    2

    再帰を使用できます。これには、サブメニューの無限レベルをトラバースできるという追加の利点があります。

    function renderList($array) {
        echo "<ul>";
        foreach ($array as $key => $item)) {
            echo "<li>";
            if (is_array($item) {
                echo $key;
                renderList($item);
            } else {
                echo $item;
            }
            echo "</li>";
        }
        echo "</ul>";
    }
    
    $menu = array("item1", "item2", "item3" => array("subitem1", "subitem2", "subitem3"), "item4", "item5", "item6");
    renderList($menu);
    

    ここにフィドルがあります:http://phpfiddle.org/main/code/2p8-erq

    于 2013-10-02T09:53:04.573 に答える
    1

    これを試して

    <?php
    $menu = array("item1", "item2", "item3" => array("subitem1", "subitem2", "subitem3"), "item4", "item5", "item6"); // hope it's defined coreectly
    setfunction($menu);
    function setfunction($menu){
    
    echo "<ul>";
    foreach ($menu as $key => $item) {
            echo "<li>";
            if(is_array($item))
            {
                echo $key;
                setfunction($item);
            } 
            else 
            {
                echo $item;
            }
            echo "</li>";
        }
    echo "</ul>";
    }
    
    ?>
    

    出力

    item1
    item2
    item3
        subitem1
        subitem2
        subitem3
    item4
    item5
    item6
    
    于 2013-10-02T09:58:16.723 に答える
    1

    そのためには、ネストされた関数を使用する必要があります。

    コードが更新されました

    ここにフィドルがあります:http://phpfiddle.org/main/code/tac-3jh

    <?php
    $menu = array("item1", "item2", "item3" => array("subitem1", "subitem2", "subitem3"), "item4", "item5", "item6");
    
    function arr2ul($arr){
        $ret='';
        if (is_array($arr)){
        $ret='<ul>';
            foreach($arr as $key=>$val){
                if(is_array($val)){
                    $ret.='<li>'.$key;
                    $ret.=arr2ul($val);
                    $ret.='</li>';
                }else{
                    $ret.='<li>'.$val.'</li>';
                }
            }
            $ret.='</ul>';
        }
        return $ret;
    }
    
    $result=arr2ul($menu);// contains the html output and you
    // can echo it where you want
    
    echo $result;
    ?>
    

    出力: (このように)

    <ul>
        <li>item1</li>
        <li>item2
            <ul>
                <li>sub item<li>
            </ul>
        </li>
    
    </ul>
    
    于 2013-10-02T09:56:20.280 に答える