如何通过两个列表?

时间:2012-02-06 16:02:44

标签: list loops coldfusion coldfusion-9

我需要将两个单独列表的输出连接在一起以在CFMAIL中输出,我想知道最好的方法是什么。

我有两个表单字段:first_name和last_name

每个字段最多包含5个名称。我需要遍历这些名称并加入名字和姓氏,然后将它们输出到无序列表。我无法直观地看到实现这一目标的正确方法。

有人可以在CFML中建议一个方法(我不太了解CFSCRIPT)。

谢谢!

编辑:我应该补充一点,这两个字段总是具有完全相同的条目数。感谢所有回答 - 证明有很多方法可以给猫皮肤涂抹:)

5 个答案:

答案 0 :(得分:4)

我会做像

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

如果这是一个5000的列表,你最好把它放在一个结构或一个数组中,但是对于一个~5的列表,这应该就足够了。

答案 1 :(得分: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>

答案 2 :(得分: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>

答案 3 :(得分:1)

您可以在CFLOOP中使用“list”属性,但这意味着在输出中组合列表函数。下面是一个如何完成它的例子,它假设两个列表总是具有相同的长度。如果这些名称被用户键入,那么我可能会害怕他们是否输入了一个逗号,因为这样可以通过任何类型的循环来解决问题。

<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>

答案 4 :(得分: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>