多维数组HTML无序列表 [英] Multidimensional array to HTML unordered list
问题描述
我有以下的数组,我想转变成一个无序列表(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屋!