利用foreach
smarty中section的嵌套用法,再用Smarty的循环foreach做个嵌套循环实例.
两个方法都很简单,关键是要构造好多维数组,然后循环的时候把相应的键名进行引用。。。是不是说得很模糊,看例子吧,不好解析,例子直观好看,先来看数组,引用原来文章的:
代码如下 | 复制代码 |
$query = "SELECT id,name,name_cn FROM di_flag ORDER BY id desc"; $result = mysql_query($query); while($row = mysql_fetch_array($result)) { $query2="SELECT id, name, name_cn,flag FROM di_sort WHERE di_sort.flag =$row[id] ORDER BY id desc"; $result2=mysql_query($query2); while($row2 = mysql_fetch_array($result2)) { $post[]=array('sid'=>$row2['id'], 'sortname'=>$row2['name'], ); } $row_array[] = array('cid'=>$row['id'], ‘cat_name'=>$row['name'], ‘topic'=>$post ); unset($post); } $smarty->assign("forum",$row_array); unset($row_array); |
很简单,以上是一个二维数组,然后再看如何嵌套循环,这回用foreach咯,看代码:
代码如下 | 复制代码 |
{foreach from=$forum ietm=value} {$value.cat_name} {foreach from=$value.topic ietm=value2} |
利用section循环
一、PHP处理文件输出三维数组代码如下:
代码如下 | 复制代码 |
$brand_spaces = array(); foreach ($category AS $key => $value) { $condition = ' AND B.`regionid` = '.$regions->regionid.' AND M.`levelid` = 1 AND B.`categoryid` =' .$value['categoryid'].' AND B.`ischecked` = 1'; //$resourceid = $value['categoryid']; $brand = $brandspaces->FetchByCondition('5',$condition,'B.`sort` asc'); $brand_spaces[] = $brand; } //print_r($brand_spaces); $smarty->assign('brand_spaces',$brand_spaces); |
通过foreach循环查询符合条件的结果集,重组数组。
二、处理文件print_r输出的三维数组结果显示如下:
代码如下 | 复制代码 |
Array ( [0] => Array ( [0] => Array ( [0] => 85 [id] => 85 [15] => php教程 [categoryname] => php教程 [16] => /u/342/logo/logo342.jpg [logo] => /u/342/logo/logo342.jpg [18] => php教程示例一 [title] => php教程示例一 ) [1] => Array ( [0] => 410 [id] => 410 [15] => php教程 [categoryname] => php教程 [16] => /u/398/logo/logo398.jpg [logo] => /u/398/logo/logo398.jpg [18] => mysql数据库优化 [title] => mysql数据库优化 ) ) [1] => Array ( [0] => Array ( [0] => 9 [id] => 9 [15] => SEO优化 [categoryname] => SEO优化 [16] => /u/228/logo/logo228.gif [logo] => /u/228/logo/logo228.gif [18] => seo/seo.html" target="_blank">搜索引擎优化技巧 [title] => 搜索引擎优化技巧 ) [1] => Array ( [0] => 494 [id] => 494 [15] => SEO优化 [categoryname] => SEO优化 [16] => /u/453/logo/logo453.gif [logo] => /u/453/logo/logo453.gif [18] => seo优化几大注意点 [title] => seo优化几大注意点 ) ) ) |
三、在模板文件通过smarty的section嵌套循环详细分析:
代码如下 | 复制代码 |
<!--{section name=index loop=$brand_spaces}--> <div class="channel_i"> <a href="#" title="" class="leftF"><div><!--{$brand_spaces[index][0].categoryname}--></div></a> <!--{section name=customer loop=$brand_spaces[index]}--> <div class="brands_i"> <span class="pic_logo"><a href="#" title="#"><img src="<!--{$brand_spaces[index][customer].logo}-->" alt="#" width="109" height="60" /></a></span> <p><a href="#"><!--{$brand_spaces[index][customer].title}--></a></p> </div> <!--{/section}--> </div> <!--{/section}--> |
1、$brand_spaces为assign名称,$brand_spaces 的长度为2,所以将loop=$brand_spaces与loop=2最后结果是一样的。loop为"决定循环次数的变量名称".
2、<!--{$brand_spaces[index][0].categoryname}-->获取到三维数组最外层的循环并得到[categoryname]的value值
3、$brand_spaces[index]分解开为:$brand_spaces[1]和$brand_spaces[2]。
4、下面这个<!--{$brand_spaces[index][customer].logo}-->为获取到[logo]的value的值。
如果觉得上面的看不是很明显,为了便于理解,你也可以设一个变量:$brand=$brand_spaces[index];
即section内部循环为:<!--{section name=customer loop=$brand}-->
即获取[logo]的值为 <!--{$brand[customer].logo}-->,这和平常我们写的section一次循环一样,就很好理解了。