2010-02-08 2 views
1

Я прохожу через вложенный массив в smarty, и каждый элемент имеет статус «активный» или «неактивный». Как я могу обнаружить последний элемент в массиве, который настроен на активный?Найти последний элемент массива с определенным свойством в smarty

пример кода:

{foreach from=$steps item=step name=step} 
{if $step.status == 'active' && ????? } 

{/if} 
{/foreach} 

ответ

1

ли массив индексируется численно или по ключу? Если числовое, я думаю, что аргумент item в вашем цикле является индексом, поэтому вы можете использовать его в своем if. если его нет, тогда вам нужно позвонить count, чтобы получить общее количество элементов, а затем вручную увеличить. или вы можете использовать array_values для преобразования ключей в числовые значения перед началом цикла. Не совсем уверен, как это сделать в Smarty.

-1

Я понятия не имею, что такое «умение», но обычный способ сделать это - просто сохранить ссылку на последний найденный элемент; например,

{foreach from=$steps item=step name=step} 
    {if $step.status=="active" && ...} 
     $last_step = $step 
    {/if} 
{/foreach} 

Затем, в конце своего цикла, $last_step будет ссылка на последней активной $step. Это вам не нужен фактический элемент, просто его индекс, а затем сохраните индекс.

+0

Smarty является шаблонным движком, который якобы имеет цель, несмотря на то, что сам PHP является только прославил шаблонный движок (и я говорю об этом с огромным количеством любви к PHP) :-) – prodigitalson

0

Я думаю, что это что-то, что выходит за рамки логики шаблона и должно выполняться в сценарии.

1

Просто используйте параметр step для инструкции foreach и используйте предопределенную переменную $ smarty.foreach. ИМЕНИ .last

{foreach from=$steps item=step name=step_foreach} 
    {if $step.status=="active" && $smarty.foreach.step_foreach.last} 
     last step is active 
    {/if} 
{/foreach}