Найти последний элемент массива с определенным свойством в smarty - PullRequest
1 голос
/ 08 февраля 2010

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

пример кода:

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

 {/if}
{/foreach}

Ответы [ 4 ]

1 голос
/ 06 августа 2010

Просто используйте параметр шага для оператора foreach и используйте предопределенную переменную $ smarty.foreach. NAME .last

{foreach from=$steps item=step name=step_foreach}
    {if $step.status=="active" && $smarty.foreach.step_foreach.last}
        last step is active
    {/if}
{/foreach}
1 голос
/ 08 февраля 2010

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

0 голосов
/ 10 февраля 2010

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

0 голосов
/ 08 февраля 2010

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

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

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

...