2012-02-06 4 views
3

Мне нужно объединить выходные данные двух отдельных списков для вывода в CFMAIL, и мне интересно, какой лучший способ приблизиться к этому.Как заполнить два списка?

У меня есть два поля формы: First_name и last_name

Поля имеют до 5 имен в каждом. Мне нужно пропустить эти имена и присоединиться к имени и фамилии, а затем вывести их в неупорядоченный список. У меня возникли проблемы с визуализацией того, какой правильный подход для этого.

Может кто-нибудь предложить метод в CFML (я не знаю CFSCRIPT очень хорошо).

Спасибо!

EDIT: Я должен был добавить, что оба поля всегда будут иметь одинаковое количество записей. Спасибо всем, что ответили - доказательство того, что есть много способов кожи кошки :)

ответ

4

Я бы сделать что-то вроде

<cfloop from="1" to="#ListLen(firstnames)#" index="i"> 
#ListGetAt(firstnames,i)# #ListGetAt(lastnames,i)#<br> 
</cfloop> 

Если бы это был список 5000 вы бы лучше положить это в структуре или массиве, но для списка ~ 5 это должно быть достаточно.

+3

, а затем с помощью ListGetAt(), используйте GetToken(). делает то же самое, что и ListGetAt(), это не вызовет ошибки, если позиция списка не существует. он просто выдает пустую строку. – rip747

+0

@mrbusche - Спасибо, прост и чист. – red4d

1

Я думаю, что это был бы самый простой способ добиться этого.

<!--- Create a names container ---> 
<cfset names = "<ul>"> 
<!--- Fill some dummy containers ---> 
<cfset first = "thomas,henry,philip,john,rony"> 
<cfset last = "smith,baker,crowe,ryan,jones"> 
<!--- Loop through the lists and append them to the container string ---> 
<cfloop index="name" to="#listLen(first)#" from="1"> 
<cfset names &= "<li>" & ListGetAt(first,name) & " " & ListGetAt(last,name) & "</li>"> 
</cfloop> 
<cfset names &= "</ul>"> 
<cfoutput>#names#</cfoutput> 
1

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

<Cfset firstnames="Matt,Ian,Brandon,Sam,Tom"> 
<cfset lastnames="Jones,Smith,Weiss"> 

<!--- SEE WHICH LIST IS LONGER AND SET THAT AS THE ONE THAT WE WILL USE FOR THE LOOP ---> 
<cfif ListLen(firstnames) gte ListLen(lastnames)> 
    <cfset primary=firstnames> 
<cfelse> 
    <cfset primary=lastnames> 
</cfif> 

<cfset myOutput="<ul>"> 
<cfloop from="1" to="#ListLen(primary)#" index="i"> 
    <Cfset myOutput &= "<li>"> 

    <cfif ListLen(firstnames) gte i> 
     <cfset myOutput &= ListGetAt(firstnames,i)> 
    </cfif> 

    <cfif ListLen(lastnames) gte i> 
     <cfset myOutput &= " " & ListGetAt(lastnames,i)> 
    </cfif> 

    <Cfset myOutput &= "</li>"> 
    </cfloop> 
<Cfset myOutput &= "</ul>"> 


<cfoutput>#myOutput#</cfoutput> 
1

Вы можете использовать «список» атрибут с CFLOOP хотя это означает объединение функций списка в выходной файл. Вот пример того, как это можно сделать, и это делает предположение, что два списка всегда будут иметь одинаковую длину. Если эти имена вводятся пользователями пользователями, я мог бы опасаться, если бы они ввели запятую, поскольку это могло бы отбросить вещи с помощью каких-либо циклов.

<cfset lstFirstNames = "John,Bob,Tom,Jeff" /> 
<cfset lstLastNames  = "Smith,Doe,Rodriguez,Horan" /> 

<cfloop list="#Variables.lstFirstNames#" index="FirstName" /> 
    #FirstName# #ListGetAt(Variables.LastNames, ListFind(Variables.lstFirstNames, FirstName))#<br /> 
</cfloop> 
+0

Это была интересная техника, которую я тоже могу использовать. +1 – red4d

+0

Я забыл упомянуть о другой потенциальной проблеме, если бы у вас было более одного человека с тем же именем и/или фамилиями. ListFind собирается найти первое вхождение. – Snipe656

0

попробовать:

<cfset lstFirstNames = "John,Bob,Tom,Jeff" /> 
<cfset lstLastNames  = "Smith,Doe,Rodriguez,Horan" /> 

<cfloop list="#Variables.lstFirstNames#" index="FirstName"> 
    <cfoutput>#FirstName# #ListGetAt(Variables.lstLastNames, ListFind(Variables.lstFirstNames, FirstName))#</cfoutput><br /> 
</cfloop> 
+0

Лучше публиковать незначительные изменения (например, добавить 'cfoutput') в качестве [редактирования существующего ответа] (http://stackoverflow.com/a/9164957/104223) или оставить комментарий. – Leigh

+0

Согласен, но самые верные ответы на все ошибки. Это обновленный (рабочий) код. Но я думаю, я мог бы указать на эту мысль. – Fergus

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