【发布时间】:2011-11-27 05:40:39
【问题描述】:
任何人都可以在此代码上帮助我吗?
<?php
function buildMenuWalk(&$array, &$depth, $currentDepth = 1)
{
# start new level html
$html = '';
# walk till the depth defined on the config
if($currentDepth > $depth)
{
return null;
}
# loop through all items in this level
foreach($array as $key => &$value)
{
# if not in area map continue
if(!is_numeric($key))
{
continue;
}
# if no <li> has been created yet, open the <ul>
$html .= empty( $html ) ? '<ul class="dropdown">' : '';
#extract the label from this level's array, designated by $labelKey
$label = isset( $value['areaname'] ) ? $value['areaname'] : '';
# open an <li>
$html .= '<li>';
# generate url
$url = '';
if($currentDepth == $depth)
{
$url = ' href="'.
$url .= '"';
}
# construct content inside the <li>
$html .= '<a' . $url .'>' . $label . '</a>';
# run the function again to grab children levels
if(is_array($value))
{
$html .= buildMenuWalk($value, $depth, $currentDepth + 1);
}
# close <li>
$html .= '</li>';
}
# close <ul> if was generated content on this level
$html .= !empty( $html ) ? '</ul>' : '';
return $html;
}
$depth = 2;
$config['content']['map'][1]['areaname'] = 'area_1';
$config['content']['map'][1][1]['areaname'] = 'block_1';
$config['content']['map'][2]['areaname'] = 'area_2';
$config['content']['map'][2][1]['areaname'] = 'block_1';
$config['content']['map'][2][2]['areaname'] = 'bloack_2';
echo buildMenuWalk($config['content']['map'], $depth);
?>
如果您检查上面的代码,我会使用递归方式显示菜单...
如果脚本识别菜单到达深度,将在标签内显示href=""。在这个 href 中,我想在递归中添加所有父区域。
例如:
$config['content']['map'][2]['areaname'] = 'area_2';
$config['content']['map'][2][1]['areaname'] = 'block_1';
$config['content']['map'][2][2]['areaname'] = 'bloack_2';
当脚本到达block_2时,我需要显示:
<a href="area_2=2&block_2=2">
由于它是一个多维数组并且可以增长到 4-5 维,因此输出 href 应该计算所有这些级别。例如 area_2=1&block_10=5&sub_area_1=5§ion_7=8 ...
我可能需要一些数组来存储递归期间的所有 href 路径,但我不知道该怎么做。
谢谢,
PS:脚本将用于构建下拉菜单。父级别不需要链接,因此打印标签将显示子菜单。最后一个孩子,将被链接,但需要包含所有父参数,以便过滤结果。
链接到运行和返回值的代码: http://codepad.org/iyrcdfQP
【问题讨论】:
标签: php arrays recursion multidimensional-array