Ban*_*nny 1 arrays coldfusion loops list
我目前正在尝试创建一个<select>下拉列表,该列表将<option>根据URL变量(或默认值)选择选择的列表.但是,我不希望我的选项列表看起来像;
name_az,name_za,最新,最古老
因为这不是非常用户友好,但我也不想在我的代码中使用这些;
名称AZ(默认),名称ZA,最新乐队,最旧乐队
因为很明显,这为我自己做了更多的工作.
我可以手动创建每个选项列表,并<cfif>检查每组选项以选择所需的选项.但是,正如任何设计人员所知,当您创建循环列表并简单地向该列表添加两个值时,这会产生许多额外的,不必要的工作.
以下是我目前的代码;
<select>
<cfset sortlist = "name_az|Name A-Z (Default),name_za|Name Z-A,newest|Newest Bands,oldest|Oldest Bands">
<cfoutput>
<cfloop list="#sortlist#" delimiters="," index="sortpair">
<cfloop list="#sortpair#" delimiters="|" index="sortphrase">
<option value="#sortphrase#">#sortphrase#</option>
</cfloop>
</cfloop>
</cfoutput>
</select>
Run Code Online (Sandbox Code Playgroud)
我希望它返回这个:
<select>
<option value="name_az">Name A-Z (Default)</option>
<option value="name_za">Name Z-A</option>
<option value="newest">Newest Bands</option>
<option value="oldest">Oldest Bands</option>
</select>
Run Code Online (Sandbox Code Playgroud)
但是,显然我要求它返回sortphrase列出的任何地方,所以它将返回如下:
<select>
<option value="name_az">name_az</option>
<option value="Name A-Z (Default)">Name A-Z (Default)</option>
<option value="name_za">name_za</option>
<option value="Name Z-A">Name Z-A</option>
etc..
</select>
Run Code Online (Sandbox Code Playgroud)
有没有办法可以创建一个<cfloop>我可以x在列表中循环数量的位置?
你使用嵌套循环的想法对我来说似乎不对.可以将其视为| 分开列表,但为什么要循环呢?您最终会得到两倍于您需要的选项标签.尝试
<cfloop list="#sortlist#" delimiters="," index="sortpair">
<option value="#listFirst(sortpair, '|')#">#listLast(sortpair, '|')#</option>
</cfloop>
Run Code Online (Sandbox Code Playgroud)
此外,通常阵列比Coldfusion中的列表执行速度更快.对于像这样小的东西并不重要,但我通常会使用数组而不是列表,至少对于循环结束(但可能仍然使用| -delimited列表用于两个独立的部分).
或者,您可以为每个键值对使用结构.例如,这是使用关联数组表示法的另一种方法:
<cfset sortarray = [
{name = "name_az", value = "Name A-Z (Default)"},
{name = "name_za", value = "Name Z-A"},
{name = "newest", value = "Newest Bands"},
{name = "oldest", value = "Oldest Bands"}
]>
<cfloop array="#sortarray#" index="sortstruct">
<option value="#sortstruct['name']#">#sortstruct['value']#</option>
</cfloop>
Run Code Online (Sandbox Code Playgroud)
或使用结构表示法:
<cfloop array="#sortarray#" index="sortstruct">
<option value="#sortstruct.name#">#sortstruct.value#</option>
</cfloop>
Run Code Online (Sandbox Code Playgroud)