2014-02-17 5 views
0

Как получить последние 7 элементов массива php в smarty? Я написал код, чтобы получить последний элементПолучить последние N элементов из массива в smarty

 {foreach from=$results item=result name=forsmart} 
             {if $smarty.foreach.forsmart.last} 
              {$result->getAvgtimeonpage()|date_format:"%M :%S"} 
             {/if} 
            {/foreach} 

как получить последние 7 элементов?

С наилучшими пожеланиями, спасибо за помощь

ответ

1

В вашем Еогеасп:

1) Ассигновать счетчик:

{assign var=toShow value=(($results|@count) - 7)} 

2) Показать элементы с индексом больше счетчик:

{foreach from=$results item=result name=forsmart} 
     {if $smarty.foreach.forsmart > $toShow} 
      {$result->getAvgtimeonpage()|date_format:"%M :%S"} 
     {/if} 
{/foreach} 

В течение цикла:

1) Присвоить петли ограничители

{assign var=maxCount value=(($results|@count)} 
{assign var=toShow value=($maxCount - 6)} 

2) Loop ' n roll:

{for $i=$toShow to $maxCount} 
    {$results[i]->getAvgtimeonpage()|date_format:"%M :%S"} 
{/for} 

Извините, если я совершил какую-либо опечатку, но я надеюсь, что вы получите эту идею.

+0

Спасибо, теперь он принимает последние 7 элементов. Можете ли вы рассказать мне, как их суммировать? Я использовал этот код из 1) и 2) в foreach. и у меня есть 7 временных предметов. Я хочу суммировать их за 1 раз. –

+0

Если вы хотите получить сумму, назначьте новую переменную, т. Е. '{Присваивать var = timeTotal value = 0}' (перед циклом) и изменить линию цикла на: '{assign var = timeTotal value = $ timeTotal + ($ results [i] -> getAvgtimeonpage() | date_format: "% M:% S")} 'и после цикла вы можете показать значение с помощью {$ timeTotal}. ОДНАКО, я не знаю вашего кода, но я предлагаю вам сделать этот цикл и суммировать php и просто пропустить рассчитанное общее время для smarty. – MSadura

+0

Я использую карты Google api, и почти невозможно сделать что-то в php без ошибок, поэтому я стараюсь ничего не делать;) –

0

Вы можете попробовать это

$arrayLength = count($results); 
for ($i = $arrayLength-7; $i < $arrayLength; $i++) { 
    ... 
} 

я редактировать свой пост, чтобы предоставить код для Smarty

{assign arrayLength = {$results|@count}} 
{for $i=$arrayLength-1 to $arrayLength} 
    ... 
{/for} 
+0

Вы на 100% уверены, что я могу использовать это в шаблоне smarty? –

2

Что касается ответа MarkS, вам не нужно назначать счетчик. У Smarty есть встроенная сумма.

{foreach from=$results item=result name=forsmart} 
     {if $smarty.foreach.forsmart.iteration > ($smarty.foreach.forsmart.total - 7)} 
      {$result->getAvgtimeonpage()|date_format:"%M :%S"} 
     {/if} 
{/foreach} 
+0

Хорошая точка для цикла foreach, но я бы предпочел использовать цикл for, потому что вам не нужно перебирать весь массив результатов. Конечно, это скорее повлияет на время на огромном массиве. – MSadura

+0

@Panama Jack Это не работает, результаты пустые строки –

+0

@woj_jas Извините, с ошибкой итерации. Теперь он должен работать. –

Смежные вопросы