Smarty如何从foreach获得第一个索引?

时间:2012-12-27 14:49:47

标签: php foreach smarty

施工是这样的:

<!-- 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值。怎么做好?我只需要第一个。

3 个答案:

答案 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}