打破值列表以在一行中显示5条记录,然后移至下一行,依此类推

时间:2016-10-04 17:23:12

标签: coldfusion

我有以下代码,我试着使用mod操作符列出该行的5个项目然后移动到下一行,在单行上它应该显示5个项目,然后在下一行,它应该显示剩余的项目,如果剩余项目超过5,则应该转到第3行,然后

我正在尝试此代码:但它没有做任何事情

<cfset items = "1,2,3,4,5,6,7,8,9,0">
<cfif listLen(items) mod 5>
<cfoutput>
    #items##Chr(10)##chr(13)#TEST
</cfoutput> 
</cfif>

它显示全部在一行

3 个答案:

答案 0 :(得分:3)

您的代码存在一些问题。

  • 您没有循环显示列表以显示每个项目。
  • Chr(10)和Chr(13)(换行和回车)不会在HTML和您的浏览器中显示。

我修改了你的代码:

<cfset counter = 0>
<cfset items = "1,2,3,4,5,6,7,8,9,0,a,b,c">
<cfloop index="thisItem" list="#items#">
    <cfset counter = counter + 1>
    <cfif counter mod 5>
        <cfoutput>#thisItem#, </cfoutput>
    <cfelse>
        <cfoutput>#thisItem#<br></cfoutput>
    </cfif>
</cfloop>

Try it here

以下是使用cfscript语法的相同逻辑示例:

<cfscript>
counter = 0;
items = "1,2,3,4,5,6,7,8,9,0,a,b,c";
for (counter = 1; counter lte listlen(items); counter++) {
    if (counter mod 5) {
        writeOutput('#listGetAt(items,counter)#, ');
    } else {
        writeOutput('#listGetAt(items,counter)#<br>');
    }
}
</cfscript>

Try it here

我在这里给你的代码可以清理一下,但希望你很容易理解。

答案 1 :(得分:2)

如果你在CF10+

,这是另一种方法
<cfscript>

    // Items List
    items_list = "1,2,3,4,5,6,7,8,9,0,a,b,c";

    // Convert to array
    items_array = items_list.listToArray( "," );

    // Item Count
    itemCount = arrayLen( items_array );

    // Display
    for ( i = 1; i <= itemCount; i += 5) {
        writeOutput( items_array.slice( i, i + 5 - 1 > itemCount ? itemCount % 5 : 5 ).toList( "," ) & "<br>" );
    }
</cfscript>

这是TryCF

答案 2 :(得分:1)

这是另一种方法。

<cfset items = "1,2,3,4,5,6,7,8,9,0,a,b,c">
<cfoutput>
    <cfloop from="1" to="#listLen(items)#" index="i">
        #listGetAt(items,i)#
        <cfif i mod 5 eq 0>
            <br>
        <cfelseif i neq listLen(items)>
            ,
        </cfif>
    </cfloop>
</cfoutput>

结果

1 , 2 , 3 , 4 , 5 
6 , 7 , 8 , 9 , 0 
a , b , c