施工是这样的:
<!-- projects list -->
{if !empty($userObjects)}
<select id="projects-list" tabindex="1" name="project">
{if !isset($selected)}<option value="0">Choose project</option>{/if}
{foreach from=$userObjects item=v}
<option value="{$v.Id}" {if $selected==$v.Id}selected="selected"{/if} }>{$v.Name}
{* if it's 1st element *}
{if $smarty.foreach.v.index == 0}
{if isset($limit)}<br /><span id="projlimit">{$limit}</span> {$currency->sign}{/if}
{/if}
</option>
{/foreach}
</select>
你可以看到我做了
{if $smarty.foreach.v.index == 0}
但它出了问题。在这种情况下,所有options
元素都具有$ limit值。怎么做好?我只需要第一个。
答案 0 :(得分:18)
我不想显得粗鲁,但邦迪的回答并不适用于所有情况。由于PHP的数组是有序映射,因此第一个键的值不总是0。
在这些情况下,您可以使用@index
,@iteration
或@first
属性。有关详细信息,请参阅http://www.smarty.net/docs/en/language.function.foreach.tpl#foreach.property.iteration
foreach
文档
您问题的可能解决方案之一是:
{foreach $rows as $row}
{if $row@iteration == 1}
First item in my array
{/if}
{/foreach}
答案 1 :(得分:10)
您可以使用此代码:
{foreach from=$userObjects item=v name=obj}
{if $smarty.foreach.obj.first}
This is the first item
{/if}
{if $smarty.foreach.obj.last}
This is the last item.
{/if}
{/foreach}
答案 2 :(得分:7)
你能用数组键做到这一点吗?
{foreach from=$rows key=i item=row}
{if $i == 0}
First item in my array
{/if}
{/foreach}