Smarty, как получить первый индекс от foreach?

Конструкция такова:

<!-- 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 имеют предельное значение $. Как сделать это хорошо? Мне нужно только первое.

Можете ли вы сделать это с помощью ключа массива?

 {foreach from=$rows key=i item=row} {if $i == 0} First item in my array {/if} {/foreach} 

Я не хочу казаться грубым, но ответ Бондии не будет работать во всех случаях. Поскольку массивы PHP – это упорядоченные карты, значение первого ключа не всегда равно 0.

В этих случаях вы можете использовать @index , @iteration или @first . Более подробная информация содержится в документации smarty foreach адресу http://www.smarty.net/docs/en/language.function.foreach.tpl#foreach.property.iteration.

Одно из возможных решений вашего вопроса:

 {foreach $rows as $row} {if $row@iteration == 1} First item in my array {/if} {/foreach} 

Вы можете использовать этот код:

 {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}