用sql查询数据结果为
year mon
2012 12
2012 10
2011 12
2010 5如何让他循环输出结果为:
<ul>
 <li>
 <a>2012</a>
   <ul>
      <li>
      <a>12</a>
      </li>
      <li>
      <a>10</a>
      </li>
   </ul>
<li>
 <li>
 <a>2011</a>
   <ul>
      <li>
      <a >12</a>
      </li>
      <li>
      <a >6</a>
      </li>
   </ul>
<li>
..........
</ul>
代码怎么写

解决方案 »

  1.   

    一般的话,是使用ThinkPHP的模版引擎来生成会比较简单,首先你需要在后台将变量赋给模版
    按照你的结构给个例子吧// 组建示例数据
    $arr = array(array('year' => '2012', 'mon' => '10', 'day' => '8'), 
        array('year' => '2012', 'mon' => '10', 'day' => '9'), 
        array('year' => '2012', 'mon' => '10', 'day' => '10'));
    // 将$arr数组赋予模版的Data变量
    $this->assign('Date', $arr);以上就完成了后端给模版赋值的操作
    下面是模版中通过模版引擎以及ThinkPHP提供的标签输出<!-- 这里的name是用来获取你赋值的变量,id是volist循环内部输出变量用的,可以随便起 -->
    <volist name="Date" id="vo">
        <ul>
            <li><a>{$vo.Year}</a></li>
            <li><a>{$vo.mon}</a></li>
            <li><a>{$vo.day}</a></li>
        </ul>
    </volist>
    这样就可以按照这个格式输出了
    希望对你有用
    建议你先大体看一遍ThinkPHP的手册
      

  2.   

    volist 标记可以嵌套
    你把数据组织成多维的就是了
      

  3.   


    没明白你的意思
    你的意思是不是假如year = '2012'的时候,有 mon = '12','10'这种情况,就把他输出在year = '2012' 的子节点下?
    如果是这样的话,就像三楼版主说的,你可以在后台通过循环遍历,将year相同的项合并,作为多维数组。
    然后赋值给模版。
    模版使用标签嵌套就可以了<volist name='Date' id='vo'>
        <ul>
            <li><a>{$vo.year}</a>
                <ul>
                    <volist name='vo.mons' id='v'>
                        <li><a>{$v.mon}</a></li>
                    </volist>
                </ul>
            </li>
        </ul>
    </volist>如果有日的话,也是这样。
    不知道你的意思是不是这样。要注意的是,如果是这样的话,ThinkPHP默认设定的标签嵌套是最多三层,要是超过三层需要设置。具体方法手册中有