CakePHP-foreach遍历数组之后,如何重置数组指针
{foreach from=$cat_list item=cat_list} <ul> {foreach from=$cat_list.children item=children}
<li><a href="{$children.uri}" {if $children.catid eq $cat.catid}class="current"{/if} title="{$config.SiteCity}{$children.catname}信息">{$children.catname}</a> <cite>({if $count[$children.catid] neq ''}{$count[$children.catid]}{else}0{/if})</cite></li> {/foreach} </ul> {/foreach} </div>
上面的代码使用后,数组指针就变了,第二次调出问题了,有什么办法解决?比如像php中的reset();,这里该怎么写,或者用其他循环语句来替换这个写法,或者其他方法,能解决问题就行!
-----------------------------------------------------------------------------使用的是smarty
问题原因是我第二次调用用了item名字一样,后面改了item名后可以调用出来,不过重复调用了7次,不知道这是什么原因
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果你使用的是Smarty应该不会有这样的问题,因为smarty的foreach语法在经过解析后是解析成PHP的foreach,众所周知,php的foreach是不需要对其进行reset的,所以可能是其它的问题造成的,最好你在使用foreach的时候给它指定一个name属性,也就是
{foreach name=list_name from=$cat_list item=cat_list}
这里附上Smarty对Foreach的解析(其中的一小段):
$output = '<?php ';
$output .= "$_from = $from; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); }";
if (isset($name)) {
$foreach_props = "$this->_foreach[$name]";
$output .= "{$foreach_props} = array('total' => count($_from), 'iteration' => 0);n";
$output .= "if ({$foreach_props}['total'] > 0):n";
$output .= " foreach ($_from as $key_part$this->_tpl_vars['$item']):n";
$output .= " {$foreach_props}['iteration']++;n";
} else {
$output .= "if (count($_from)):n";
$output .= " foreach ($_from as $key_part$this->_tpl_vars['$item']):n";
}
$output .= '?>';
看样子像是smarty,方法有多种:
1 使用{php}reset($arr);{/php} (不推荐)
2 使用section代替foreach
3 使用将数组循环之前赋给另一个变量:{assign var="arr1" value=$arr} 或者 {eval var = $arr assign="arr1"} 下边循环 $arr1