Я хочу написать обобщенную функцию, которая может выводить что-то вроде этого.
<span class="side_title">By Collection</span>
<ul class="menu">
<li class="top">
<a class="top_menu" href="#url">home</a>
</li>
<li class="sub">
<a href="#">collectionA</a>
<ul>
<li><a href="../index.html">collectionA-1</a></li>
<li><a href="#url">collectionA-2</a></li>
</ul>
</li>
<li class="sub">
<a href="#">collectionB</a>
<ul>
<li><a href="#url">collectionB-1</a></li>
</ul>
</li>
<li class="top"><a href="#url">CollectionE</a></li>
</ul>
<span class="side_title">By Functions</span>
<ul class="menu">
<li class="top">
<a class="top_menu" href="#url">home</a>
</li>
<li class="sub">
<a href="#">functionA</a>
<ul>
<li><a href="../index.html">functionA-1</a></li>
<li><a href="#url">functionA-2</a></li>
</ul>
</li>
<li class="sub">
<a href="#">functionB</a>
<ul>
<li><a href="#url">functionB-1</a></li>
<li><a href="#url">functionB-2</a></li>
</ul>
</li>
<li class="top"><a href="#url">functionE</a></li>
</ul>
но проблема в том, что я не могу найти структуру данных для представления этой структуры, я попробовал следующее (используя массив - где ключ - это содержимое ссылки, значение - это адрес. И рекурсия):
$a = array (
"By collection" => '',
'Base' => 'thisBase',
"expand" => array (
'Home' => 'home',
'collectionA' => 'collectionA',
'expand' => array (
'collectiona-1' => 'collectiona-1',
'collectiona-2' => 'collectiona-2'
),
'collectionB' => 'collectionb',
'expand' => array (
'collectionb-1' => 'collectionb-1',
'collectionb-2' => 'collectionb-2'
),
'collectionB' => 'collectionb',
'expand' => array (
'collectionc-1' => 'collectionc-1',
'collectionc-2' => 'collectionc-2'
),
),
"by Function" => ''
);
function expand($a=NULL)
{
foreach ($a as $key => $value)
{
if ($value == '')
{
echo '<span class="side_title">'.$key.'</span>';
echo '<ul class="menu">';
} elseif (is_array($value))
{
echo '<ul class="sub_menu">';
expand($value);
} else {
echo '<li><a href="'.$value.'>'.$key.'</a></li>';
}
}
echo '</ul>';
}
print_r($a);
expand($a);
Я думал об использовании xml / tree для его представления, но структура данных передается между различными функциями, поэтому я подумал, что это потребует больших усилий, поэтому я хочу знать, что с этим не так? или есть лучший способ?