Looping is a very powerful programming technique that lets you repeat a set of instructions or display output repeatedly until one or more conditions are met. cfloop supports five types of loops.

This tag must have a body.

This tag is also supported within <cfscript>

<cfloop condition=string item=string query=object charset=string struct=struct times=numeric delimiters=string list=string startline=number to=number step=number collection=any endrow=number startrow=number index=string file=string maxrows=number groupcasesensitive=boolean from=number endline=number label=string characters=number array=array group=string ><!--- body ---></cfloop>
Attribute Description
string, optional

Condition that controls the loop.

string, optional

Key for the collection

Alias: value

object, optional

Query that controls the loop. this can be a variable name or the query itself.

string, optional

charset for read the file

struct, optional

struct to loop over

numeric, optional

used for a simple loop that is looping n times

string, optional

Character(s) that separates items in list

string, optional

A list, variable, or file name; contains a list. Used with the index attribute.

number, optional

start line

number, optional

Ending value of index.

number, optional

Step by which to increment or decrement the index value.

any, optional

Collection to loop over. Used with the item attribute.

number, optional

Last row of query that is included in the loop. You cannot use this attribute together with the attribute maxRows.

number, optional

First row of query that is included in the loop.

string, optional

Index value. Lucee sets it to from value and increments or decrements by step value, until it equals to value.

When looping over a Struct/Collection:

  • When the Item attribute is also defined, the variable assigned to the Index attribute will contain the value of the Struct's Key/Value pair (otherwise, it will always contain the Key value)
  • When only the Index or Item attribute is defined, the variable will always contain the Key value.

Alias: key

string, optional

file path

number, optional

Specifies the maximum number of rows to display in the output section. You cannot use this attribute together with the attribute endrow.

boolean, optional

Boolean indicating whether to group with regard to case or not. The default value is NO; case is considered while grouping. If the query attribute specifies a query object that was generated by a case-insensitive SQL query, set the groupCaseSensitive attribute to NO to keep the recordset intact.

number, optional

Beginning value of index.

number, optional

end line

string, optional

used to address this loop from a "break" or "continue" statement (instead of the nearest one).

number, optional

The number of characters to read during each iteration of the loop from the file specified in the file attribute. If the value of the characters attribute is more than the number of characters in the file, Lucee uses the number of characters in the file.

array, optional

An array.

string, optional

Specifies the query column to use when you group sets of records together to send as an e-mail message. For example, if you send a set of billing statements to customers, you might group on "Customer_ID." The group attribute, which is case sensitive, eliminates adjacent duplicates when the data is sorted by the specified field. See the Usage section for exceptions.


Index & Conditional loop

<cfloop index = "LoopCount" from = "1" to = "5">
	The loop index is <cfoutput>#LoopCount#</cfoutput><br>
<br><u>Conditional loop</u><br>
<cfset CountVar = 1>
<cfloop condition = "CountVar LESS THAN OR EQUAL TO 5">
	<cfset CountVar = CountVar + 1>
	CountVar is <cfoutput>#CountVar#</cfoutput><br>

List loop

<cfset listEle = "lucee,test,case">
<br><u>Simple list loop</u><br>
<cfloop list="#listEle#" index="res">
<br><u>List loop</u><br>
<cfset listDeliEle = "I;Love;Lucee">
<cfloop list="#listDeliEle#" index="element" delimiters=";">
<br><u>deli loop with index</u><br>
<cfloop index="a" from="1" to="#listlen(listEle)#">
<br><u>Condition with list</u><br>
<cfset cV = 1>
<cfloop condition="cv lte #listlen(listele)#">
	<cfset cV = cV+1>

Array loop & Struct loop

	<cfset arr = ["I","Love","Lucee"]>
	<br><u>Array using index loop</u><br>
	<cfloop array="#arr#" index="arr">
	<cfset Departments = {"Save ":"Water ", "Plant ":"gren ", "Protect ":"Earth "}>
    <br><u>Struct  loop</u><br>
	<cfloop collection="#Departments#" item = "person">
			#StructFind(Departments, person)#<br>

See also