多维数组HTML无序列表 [英] Multidimensional array to HTML unordered list

查看:105
本文介绍了多维数组HTML无序列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下的数组,我想转变成一个无序列表(HTML)。

 阵列

    [0] =>排列
        (
            [URL] => /
            [ID] => 53a8717fe9ab5
            [模板] =>家
            [标题] =>家
        )    [1] =>排列
        (
            [URL] => /关于
            [ID] => 53a871fe8b05b
            [模板] =>内容
            [标题] =>关于
        )    [2] =>排列
        (
            [URL] => /约/分
            [ID] => 53cb88b7ed22d
            [模板] =>内容
            [标题] =>关于(子)
        )    [3] =>排列
        (
            [URL] => /约/子/ subsub
            [ID] => 53cb88bc7d32d
            [模板] =>内容
            [标题] =>关于(subsub)
        )    [4] =>排列
        (
            [URL] => /联系
            [ID] => 53a8718981161
            [模板] =>内容
            [标题] =>联系我们
        ))

所以我试图创建一个以上的,看起来像这样一个多维数组:

 阵列

    [0] => /
    [1] => /关于
    [讲述] =>排列
        (
            [0] => /约/分
            [子] =>排列
                (
                    [0] => /约/子/ subsub
                )        )    [2] => /联系

但是,这是据我得到......别说创造的实际< UL>

任何帮助将非常AP preciated。

修改

我产生的递归< UL> 使用:

 私有函数generateTree(从$){
    $为= [];    的foreach($从作为$元素){
        $ PATH =爆炸('/',$元素[网址]);
        如果(计数($ PATH)=== 1)array_unshift($路径,'/');        $ _to =安培; $到;
        为($ I = 0; $ I<计数($ PATH)-1; $ I ++){
            如果(!array_key_exists($ PATH [$ i],$ _to))$ _to [$路径[$ i] = [];
            $ _to =安培; $ _为[$ PATH [$ i]];
            的print_r(爆(/,$ PATH));
            回声< BR>中;
        }
        $ _to [] = $元素[URL];
    }    返回到$ [];
}

这是我期望的输出:

 < UL>
    <立GT;< A HREF =/>家庭和LT; / A>< /李>
    <立GT;
        < A HREF =/关于>关于< / A>
        < UL>
            <立GT;
                < A HREF =/约/子>关于(次)LT; / A>
                < UL>
                    <立GT;< A HREF =/约/子/ subsub>关于(subsub)LT; / A>< /李>
                < / UL>
            < /李>
        < / UL>
    < /李>
    <立GT;< A HREF =/接触>联系与LT; / A>< /李>
< / UL>


解决方案

尝试这样的函数:

 函数图勒($输入){
   回声< UL>中;   $ OLDVALUE = NULL;
   的foreach($输入为$值){
     如果($ OLDVALUE = NULL&放大器;!&安培;!is_array($值))
        回声< /李>中;
     如果(is_array($值)){
        图勒($值);
     }其他
        回声<立GT; + $价值;
      $ OLDVALUE = $价值;
    }    如果($ OLDVALUE!= NULL)
      回声< /李>中;   回声< / UL>中;
}

我会离开它创建了一个函数里为每个数组,这是简单的,在任何情况下,读者需要它:

 函数图勒($输入){
   回声< UL>中;   的foreach($输入为$值)
     如果(is_array($值)){
        回声<立gt;中;
        图勒($值);
        回声< /李>中;
     }其他
        回声<立GT; + $值+< /李>中;   回声< / UL>中;
}

I have the following array which I want to transform into an unordered list (HTML).

Array
(
    [0] => Array
        (
            [url] => /
            [id] => 53a8717fe9ab5
            [template] => home
            [title] => Home
        )

    [1] => Array
        (
            [url] => /about
            [id] => 53a871fe8b05b
            [template] => content
            [title] => About
        )

    [2] => Array
        (
            [url] => /about/sub
            [id] => 53cb88b7ed22d
            [template] => content
            [title] => About (sub)
        )

    [3] => Array
        (
            [url] => /about/sub/subsub
            [id] => 53cb88bc7d32d
            [template] => content
            [title] => About (subsub)
        )

    [4] => Array
        (
            [url] => /contact
            [id] => 53a8718981161
            [template] => content
            [title] => Contact us
        )

)

So I'm trying to create a multidimensional array from the one above which looks like this:

Array
(
    [0] => /
    [1] => /about
    [about] => Array
        (
            [0] => /about/sub
            [sub] => Array
                (
                    [0] => /about/sub/subsub
                )

        )

    [2] => /contact
)

But that's as far as I'm getting... Let alone the creation of the actual <ul>.

Any help would be very much appreciated.

EDIT

I generated the recursive <ul> using:

private function generateTree($from) {
    $to = [];

    foreach ( $from as $element ) {
        $path = explode('/', $element["url"]);
        if ( count($path) === 1 ) array_unshift($path, '/');

        $_to = &$to;
        for ( $i = 0; $i < count($path)-1; $i++ ) {
            if ( !array_key_exists($path[$i], $_to) ) $_to[$path[$i]] = [];
            $_to = &$_to[$path[$i]];
            print_r ( implode("/", $path));
            echo "<br>";
        }
        $_to[] = $element["url"];
    }

    return $to[""];
}

And this is my expected output:

<ul>
    <li><a href="/">Home</a></li>
    <li>
        <a href="/about">About</a>
        <ul>
            <li>
                <a href="/about/sub">About (sub)</a>
                <ul>
                    <li><a href="/about/sub/subsub">About (subsub)</a></li>
                </ul>
            </li>
        </ul>
    </li>
    <li><a href="/contact">Contact</a></li>
</ul>

解决方案

Try a function like this:

function ToUl($input){
   echo "<ul>";

   $oldvalue = null;
   foreach($input as $value){
     if($oldvalue != null && !is_array($value))
        echo "</li>";
     if(is_array($value)){
        ToUl($value);
     }else
        echo "<li>" + $value;
      $oldvalue = $value;
    }

    if($oldvalue != null)
      echo "</li>";

   echo "</ul>";
}

[Edit]

I'll leave the function which creates a li for every array, which is simpler, in case any reader needs it:

function ToUl($input){
   echo "<ul>";

   foreach($input as $value)
     if(is_array($value)){
        echo "<li>";
        ToUl($value);
        echo "</li>";
     }else
        echo "<li>" + $value + "</li>";

   echo "</ul>";
}

这篇关于多维数组HTML无序列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆