请教,有关于smarty模版双重循环问题 {foreach from=$list item=row}{foreach from=$list2 item=row2}{/foreach}{/foreach} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你仔细看一下smarty中的section和foreach。 section和foreach 我知道 但是不知道怎么建立一个2维数组 可能你的困惑是怎么拿到数据,并赋给二维数组吧?这应该是程序页面做的事情,不是tpl。 <?$result = mysql_query("select DISTINCT pid table");while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) { unset($sub_array); $result2 = mysql_query("select id,pid,name table where pid='".$row["pid"]."'"); while ($row2 = mysql_fetch_array($result2,MYSQL_ASSOC)) { $sub_array[]=$row2; } $result_array[]=$sub_array;}$smarty->assign("result_array",$result_array);?> 楼上的 那这样的话 smarty摸版 该怎么修改呢? <{section name=pid_sec loop=$result_array}> <{$result_array[pid_sec][0].pid}>:<br> <!--大类ID--> <{section name=id_sec loop=$result_array[pid_sec]}><!--循环出每个大类ID里的商品--> <{$result_array[pid_sec][id_sec].id}>, <!--商品ID--> <{$result_array[pid_sec][id_sec].name}>:<br> <!--商品名--> <{/section}><{/section}> marse(阿彪) 我根据你给我的,是可以的 没问题. 但是当我第一行显示大类名称,好象不行. 如果就直接<{$result_array[pid_sec][0].name}>这个显示的是小类的排名第一个名称 那你就把大类名称放进去就行了,把这句SQL改一下: $result2 = mysql_query("select id,pid,name table where pid='".$row["pid"]."'");-------> $result2 = mysql_query("select id,pid,name,dalei_name table where pid='".$row["pid"]."'");然后smarty<{$result_array[pid_sec][0].dalei_name}>你试试看 因为一条记录是一维数组,所以其实你要的就是3维数组。以下是我写的测试程序。<?php include_once("./inc/smarty.inc.php");//$shangpin1=array("id"=>"1","pid"=>"ID1","name"=>"name1");$shangpin2=array("id"=>"2","pid"=>"ID1","name"=>"name2");$shangpin3=array("id"=>"3","pid"=>"ID1","name"=>"name3");$shangpin4=array("id"=>"4","pid"=>"ID2","name"=>"name4");$shangpin5=array("id"=>"5","pid"=>"ID2","name"=>"name5");$shangpin6=array("id"=>"6","pid"=>"ID3","name"=>"name6");$shangpin7=array("id"=>"7","pid"=>"ID3","name"=>"name7");$shangpin8=array("id"=>"8","pid"=>"ID3","name"=>"name8");$shangpin9=array("id"=>"9","pid"=>"ID3","name"=>"name9");$dalei1[]=$shangpin1;$dalei1[]=$shangpin2;$dalei1[]=$shangpin3;$dalei2[]=$shangpin4;$dalei2[]=$shangpin5;$dalei3[]=$shangpin6;$dalei3[]=$shangpin7;$dalei3[]=$shangpin8;$dalei3[]=$shangpin9;$result_array[]=$dalei1;$result_array[]=$dalei2;$result_array[]=$dalei3;$smarty->assign("result_array",$result_array);$smarty->display("entry/test.html"); ?> smarty部分就是上面给出的。希望能帮助你理解。只要理解了,你想输出什么就输出什么。其实smarty里的数组,循环....概念都和php差不多的 恩 我明白你的意思 可能我这个表有点特殊性, 大类名和小类名都用name这个字段的,只是用pid来标住父类的id, 这样来实现无 限级分类的.但是我用了另外个变通的方法也可以实现 ,基于你这给的思路 非常感谢 还有请教下 怎么在smarty里输出多行2列呢? 就是一个商品的展示? 不和你平常输出一样的嘛{foreach from=$array item=value key=key}<tr><td>{$key}<td><td>{$value}</td></tr>{/foreach} 楼上没说错,其实smarty就是php(只是语法有一点点的不同),你php怎么输出多行,smarty就怎么输。不怕做不到,只怕想不到。赫赫 section循环二维数组不需要嵌套!其中list就是$data[0],$data[1],$data[2]...所以里面写$data[list]就代表了一个二维数组的一维,后面再连上你的数据库字段名:$data[list].topic_view_count就可以显示二维数组的元素了。关键是,你这个$data,要是一个"合法"的二维数组!用下面这个函数,会将每一条数据进行入栈,最后返回的是一个表内所有数据的集合的二维数组。function fetchArray($res,$type = MYSQL_ASSOC) { $array = array(); while($f = mysql_fetch_array($res, $type)) { array_push($array,$f); } unset($res); return $array;}section显示二维数组的例子:{section name=list loop=$data}<tr bgcolor="{cycle values=',#eeeeee'}"><td align="center" width="68" height="24">{$data[list].topic_view_count}</td><td align="center" width="64" height="24">{$data[list].topic_reply_count}</td><td width="319" height="24"><a href="topicread.php?title={$data[list].topic_title|escape:'url'}" target="_blank">{$data[list].topic_title}</a></td><td width="104" height="24">{if $data[list].user_nick eq '匿名用户'}匿名用户{else}<a href="user.php?userid={$data[list].user_id}" target="_blank">{$data[list].user_nick}</a>{/if}</td><td width="145" height="24">{if $data[list].last_reply_time eq null} {if $data[list].user_nick eq '匿名用户'} 匿名用户 {else} <a href="user.php?userid={$data[list].user_id}" target="_blank">{$data[list].user_nick}</a> {/if}{else} {$data[list].last_reply_time}{/if}{if $data[list].last_reply_time eq null}{$data[list].topic_created_time}{else}{$data[list].last_reply_time}{/if}</td></tr>{/section} php. pear安装问题 imagecreatefromgif 返回的是什么东西? 招聘熟悉MySQL+PHP的兼职作者 JS中encodeURIComponent函数如何用php解码?? html+php+csv文件制作留言板 新手求助!关于获取select里面的值 PHP文件管理器发布! APACHE在WIN98里的问题,请进~~! 使用Substr()使如何避免截取半个汉字? 关于php弹出确认框的问题 fsockopen函数问题 动态加载FRAME中的内容 该怎么做呢 :(?
$result = mysql_query("select DISTINCT pid table");
while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
unset($sub_array);
$result2 = mysql_query("select id,pid,name table where pid='".$row["pid"]."'");
while ($row2 = mysql_fetch_array($result2,MYSQL_ASSOC)) {
$sub_array[]=$row2;
}
$result_array[]=$sub_array;
}
$smarty->assign("result_array",$result_array);
?>
<{$result_array[pid_sec][0].pid}>:<br> <!--大类ID-->
<{section name=id_sec loop=$result_array[pid_sec]}><!--循环出每个大类ID里的商品-->
<{$result_array[pid_sec][id_sec].id}>, <!--商品ID-->
<{$result_array[pid_sec][id_sec].name}>:<br> <!--商品名-->
<{/section}>
<{/section}>
我根据你给我的,是可以的 没问题. 但是当我第一行显示大类名称,好象不行. 如果就直接<{$result_array[pid_sec][0].name}>这个显示的是小类的排名第一个名称
$result2 = mysql_query("select id,pid,name table where pid='".$row["pid"]."'");
------->
$result2 = mysql_query("select id,pid,name,dalei_name table where pid='".$row["pid"]."'");然后smarty
<{$result_array[pid_sec][0].dalei_name}>
你试试看
<?php
include_once("./inc/smarty.inc.php");//
$shangpin1=array("id"=>"1","pid"=>"ID1","name"=>"name1");
$shangpin2=array("id"=>"2","pid"=>"ID1","name"=>"name2");
$shangpin3=array("id"=>"3","pid"=>"ID1","name"=>"name3");
$shangpin4=array("id"=>"4","pid"=>"ID2","name"=>"name4");
$shangpin5=array("id"=>"5","pid"=>"ID2","name"=>"name5");
$shangpin6=array("id"=>"6","pid"=>"ID3","name"=>"name6");
$shangpin7=array("id"=>"7","pid"=>"ID3","name"=>"name7");
$shangpin8=array("id"=>"8","pid"=>"ID3","name"=>"name8");
$shangpin9=array("id"=>"9","pid"=>"ID3","name"=>"name9");$dalei1[]=$shangpin1;
$dalei1[]=$shangpin2;
$dalei1[]=$shangpin3;
$dalei2[]=$shangpin4;
$dalei2[]=$shangpin5;
$dalei3[]=$shangpin6;
$dalei3[]=$shangpin7;
$dalei3[]=$shangpin8;
$dalei3[]=$shangpin9;
$result_array[]=$dalei1;
$result_array[]=$dalei2;
$result_array[]=$dalei3;$smarty->assign("result_array",$result_array);
$smarty->display("entry/test.html");
?>
smarty部分就是上面给出的。
希望能帮助你理解。只要理解了,你想输出什么就输出什么。其实smarty里的数组,循环....概念都和php差不多的
但是我用了另外个变通的方法也可以实现 ,基于你这给的思路
非常感谢
{foreach from=$array item=value key=key}
<tr><td>{$key}<td><td>{$value}</td></tr>
{/foreach}
不怕做不到,只怕想不到。赫赫
关键是,你这个$data,要是一个"合法"的二维数组!用下面这个函数,会将每一条数据进行入栈,最后返回的是一个表内所有数据的集合的二维数组。function fetchArray($res,$type = MYSQL_ASSOC) {
$array = array();
while($f = mysql_fetch_array($res, $type)) {
array_push($array,$f);
}
unset($res);
return $array;
}section显示二维数组的例子:{section name=list loop=$data}
<tr bgcolor="{cycle values=',#eeeeee'}">
<td align="center" width="68" height="24">{$data[list].topic_view_count}</td>
<td align="center" width="64" height="24">{$data[list].topic_reply_count}</td>
<td width="319" height="24"><a href="topicread.php?title={$data[list].topic_title|escape:'url'}" target="_blank">{$data[list].topic_title}</a></td>
<td width="104" height="24">{if $data[list].user_nick eq '匿名用户'}匿名用户{else}<a href="user.php?userid={$data[list].user_id}" target="_blank">{$data[list].user_nick}</a>{/if}</td>
<td width="145" height="24">
{if $data[list].last_reply_time eq null}
{if $data[list].user_nick eq '匿名用户'}
匿名用户
{else}
<a href="user.php?userid={$data[list].user_id}" target="_blank">{$data[list].user_nick}</a>
{/if}
{else}
{$data[list].last_reply_time}
{/if}
{if $data[list].last_reply_time eq null}
{$data[list].topic_created_time}
{else}
{$data[list].last_reply_time}
{/if}
</td>
</tr>{/section}