последняя запись в цикле - PullRequest
2 голосов
/ 12 ноября 2010

У меня есть ассоциативный массив, и я генерирую много разных вещей с этим массивом.

Необходимый вывод имеет вид

aa, ab, ac, ad, af, ak, az

Поэтому последняя запись не имеет запятой после нее

{section name=i loop=$aColums}
  {if $aColums[i].contshow eq 'y'}
    {$aColums[i].Name}
  {endif}
{/section}

Моя проблема в том, что язнать, когда я достиг последнего значения, которое имеет атрибут contshow=y.Поэтому моей следующей мыслью было применить запятую перед тем, как я напишу aColums[i].Name.Но здесь у меня похожая проблема, потому что я не знаю, когда я достиг первого значения с contshow=y.У кого-нибудь есть предложение?

Ответы [ 3 ]

3 голосов
/ 14 ноября 2010

Существует альтернативный метод, использующий свойство раздела .last.

{section name=i loop=$aColums} 
  {if $aColums[i].contshow eq 'y'} 
    {$aColums[i].Name}{if $smarty.section.i.last eq false}, {/if}
  {endif} 
{/section}

Это добавляет ',' после каждого выходного Имени - если это не последняя итерация {section}. Я предполагаю, что в данных вашего массива $ aColums еще нет запятых.

У вас также есть другой вариант - перегенерировать эту строку в PHP с помощью implode:

$aColumsString = implode(', ', $aColums);
$smarty->assign('aColumsString', $aColumsString);

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

0 голосов
/ 03 мая 2013

В Smarty 3 это значительно упрощается:

{foreach $aColumns AS $aCol}
    {$aCol}{if not $aCol@last}, {/if}
{/foreach}
0 голосов
/ 12 ноября 2010

Общий способ справиться с этим - записать запятые перед каждого элемента.Таким образом, особый случай - это первый элемент (который не нуждается в предшествующей запятой), а не последний, и намного легче понять, видите ли вы первый элемент илине.Просто установите логический флаг на true вначале, затем установите его на false после сопоставления записи.

Имейте в виду, у Smarty может быть вспомогательная функция для «объединения» массива с заданной строкой (запятая, в этом случае).Если такая функция существует, лучше всего использовать ее напрямую.

...