Ricerca…


Osservazioni

Grazie mille a

Looping attraverso una collezione utilizzando tag CFML.

<!--- Define collection --->
<cfset attributes = {
  "name": "Sales",
  "type": "text",
  "value": "Connection"
}>

<!--- 
  cfloop tag with attribute collection can be used to 
  loop through the elements of a structure
--->
<cfloop collection=#attributes# item="attribute">
  <cfoutput>
    Key : #attribute#, Value : #attributes[attribute]#
  </cfoutput>
</cfloop>

Effettuare il ciclo di una raccolta tramite CFSCRIPT.

<cfscript>
  /*define collection*/
  attributes = {
    "name": "Sales",
    "type": "text",
    "value": "Connection"
  };
  for(attribute in attributes){
    /* attribute variable will contain the key name of each key value pair in loop */
    WriteOutput('Key : ' & attribute & ', Value : ' & attributes[attribute] & '<br/>');
  }
</cfscript>

Indice

parametri

Attributo necessario genere Predefinito Descrizione
indice vero stringa Nome della variabile per l'indice del ciclo. Predefinito allo scope delle variables .
a partire dal vero numerico Valore iniziale per l'indice.
a vero numerico Valore finale per l'indice.
passo falso numerico 1 Valore con cui aumentare o diminuire l'indice per iterazione.

Ciclo indice di base

Il valore finale di x è 10.

<!--- Tags --->
<cfoutput>
    <cfloop index="x" from="1" to="10">
        <li>#x#</li>
    </cfloop>
</cfoutput>
<!--- cfscript --->
<cfscript>
    for (x = 1; x <= 10; x++) {
        writeOutput('<li>' & x & '</li>');
    }
</cfscript>
<!--- HTML Output --->
 - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 - 9
 - 10

Aumentare il passaggio a 2

Il valore finale di x è 11.

<!--- Tags --->
<cfoutput>
    <cfloop index="x" from="1" to="10" step="2">
        <li>#x#</li>
    </cfloop>
</cfoutput>
<!--- cfscript --->
<cfscript>
    for (x = 1; x <= 10; x += 2) {
        writeOutput('<li>' & x & '</li>');
    }
</cfscript>
<!--- HTML Output --->
 - 1
 - 3
 - 5
 - 7
 - 9

Passaggio decrementale di 1

Il valore finale di x è 0.

<!--- Tags --->
<cfoutput>
    <cfloop index="x" from="10" to="1" step="-1">
        <li>#x#</li>
    </cfloop>
</cfoutput>
<!--- cfscript --->
<cfscript>
    for (x = 10; x > 0; x--) {
        writeOutput('<li>' & x & '</li>');
    }
</cfscript>
<!--- HTML Output --->
 - 10
 - 9
 - 8
 - 7
 - 6
 - 5
 - 4
 - 3
 - 2
 - 1

CFLoop in una funzione

Assicurati di var o local scope l'indice all'interno di una funzione. Foo() restituisce 11.

<!--- var scope --->
<cffunction name="foo" access="public" output="false" returntype="numeric">
    <cfset var x = 0 />
    <cfloop index="x" from="1" to="10" step="1">
        <cfset x++ />
    </cfloop>
    <cfreturn x />
</cffunction>

<!--- Local scope --->
<cffunction name="foo" access="public" output="false" returntype="numeric">
    <cfloop index="local.x" from="1" to="10" step="1">
        <cfset local.x++ />
    </cfloop>
    <cfreturn local.x />
</cffunction>

ColdFusion 11 attraverso la corrente

La funzione cfloop non ha supporto per index come meccanismo di contro-stand-alone.

Condizione

Tag sintassi

parametri

Attributo necessario genere Predefinito Descrizione
condizione vero stringa Condizione che gestisce il ciclo. Non può contenere simboli matematici come < , > o = . Deve utilizzare le implementazioni di testo ColdFusion come less than , lt , greater than , gt , equals o eq .

Il valore finale di x è 5.

<cfset x = 0 />
<cfoutput>
    <cfloop condition="x LT 5">
        <cfset x++ />
        <li>#x#</li>
    </cfloop>
</cfoutput>

HTML generato

Questo avrà anche un'interruzione di riga tra ogni riga di HTML.

<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>

cfscript

Precedente a ColdFusion 8

<cfscript>
x = 0;
while (x LT 5) {
    x = x + 1;
    writeOutput('<li>' & x & '</li>');
}
</cfscript>

ColdFusion 8 attraverso la corrente

<cfscript>
x = 0;
while (x LT 5) {
    x = x++;
    writeOutput('<li>' & x & '</li>');
}
</cfscript>

ColdFusion 11 attraverso la corrente

La funzione cfloop non supporta la condition .

HTML generato

Si noti che l'output di cfscript è tutto su una riga.

<li>one</li><li>two</li><li>three</li><li>four</li>

Data o intervallo di tempo

Esempio per la data o l'intervallo di tempo.

domanda

Considera la tabella dbo.state_zip , che contiene le colonne city , statecode e zipcode e ha oltre 80.000 record.

parametri

Attributo necessario genere Predefinito Descrizione
domanda vero stringa Il nome variabile di un oggetto query.
startRow falso numerico L'indice della riga iniziale dell'oggetto query.
endRow falso numerico L'indice della riga finale dell'oggetto query.
gruppo falso stringa Il nome della colonna della query su cui raggruppare i record.

Query di esempio

<cfquery name="geo" datasource="reotrans-dev">
    SELECT city, stateCode, zipCode
    FROM dbo.state_zip
</cfquery>

Tag sintassi

Utilizzo dell'oggetto query geo come origine per cfloop . Poiché la tabella dbo.state_zip ha così tanti record, l'HTML generato richiederà un po 'di tempo. Questo esempio mostra solo il valore dei primi 20 record di HTML.

<cfoutput>
    <ul>
    <cfloop query="geo">
        <!--- Scope the column names with the query name. --->
        <li>#geo.city# | #geo.stateCode# | #geo.zipCode#</li>
    </cfloop>
    </ul>
</cfoutput>

HTML generato

<ul>
    <li>100 PALMS | CA | 92274</li>
    <li>1000 PALMS | CA | 92276</li>
    <li>12 MILE | IN | 46988</li>
    <li>1ST NATIONAL BANK OF OMAHA | NE | 68197</li>
    <li>29 PALMS | CA | 92277</li>
    <li>29 PALMS | CA | 92278</li>
    <li>3 STATE FARM PLAZA | IL | 61710</li>
    <li>3 STATE FARM PLAZA | IL | 61791</li>
    <li>30TH STREET | PA | 19104</li>
    <li>3M CORP | MN | 55144</li>
    <li>65TH INFANTRY | PR | 00923</li>
    <li>65TH INFANTRY | PR | 00924</li>
    <li>65TH INFANTRY | PR | 00929</li>
    <li>65TH INFANTRY | PR | 00936</li>
    <li>7 CORNERS | VA | 22044</li>
    <li>88 | KY | 42130</li>
    <li>9 MILE POINT | LA | 70094</li>
    <li>A A R P INS | PA | 19187</li>    
    <li>A A R P PHARMACY | CT | 06167</li>
    <li>A H MCCOY FEDERAL BLDG | MS | 39269</li>
</ul>

Limitazione dell'output a righe specifiche

Per limitare l'output della query a un intervallo specifico di righe, specificare startrow e endrow .

<cfloop query="geo" startrow="100" endrow="150">
    <li>#geo.city# | #geo.stateCode# | #geo.zipCode#</li>
</cfloop>

Raggruppamento dell'output

Nei dati di esempio, lo stesso stato elencato più volte in relazione alle città multiple associate a ciascuno stato. Puoi anche vedere la stessa città elencata più volte in relazione ai molteplici codici postali associati a ciascuna città.

Raggruppiamo prima l'output per stato. Si noti la seconda istanza di cfloop racchiusa nel contenuto che verrà emesso nel contenuto raggruppato con stateCode .

<cfoutput>
    <ul>
    <cfloop query="geo" group="stateCode">
        <!--- Scope the column names with the query name. --->
        <li>#geo.stateCode#
            <ul>
                <cfloop>
                    <li>#geo.city# | #geo.zipCode#</li>
                </cfloop>
            </ul>
        </li>
    </cfloop>
    </ul>
</cfoutput>

HTML generato (estratto) da un tag cfloop raggruppato.

<ul>
    <li>AK
        <ul>
            <li>KONGIGANAK | 99545</li>
            <li>ADAK | 99546</li>
            <li>ATKA | 99547</li>
            <!-- etc. -->
        </ul>
    </li>
    <li>AL
        <ul>
            <li>ALEX CITY | 35010</li>
            <li>ALEXANDER CITY | 35010</li>
            <li>ALEX CITY | 35011</li>
            <!-- etc. -->
        </ul>
    </li>
    <!-- etc. -->
</ul>

Infine, raggruppiamo l'output per stateCode , quindi per city per vedere tutte le voci di zipCode per città. Si noti che il 2 ° cfloop è ora raggruppato per city e un terzo cfloop esiste per l'output dei dati zipCode .

<cfoutput>
    <ul>
    <cfloop query="geo" group="stateCode">
        <li>#geo.stateCode#
            <ul>
            <cfloop group="city">
                <li>#geo.city#
                    <ul>
                        <cfloop>
                            <li>#geo.zipCode#</li>
                        </cfloop>
                    </ul>
                </li>
            </cfloop>
            </ul>
        </li>
    </cfloop>
    </ul>
</cfoutput>

HTML generato (estratto) da due tag cfloop raggruppati.

<ul>
    <li>AK
        <ul>
            <li>ADAK
                <ul>
                    <li>99546</li>
                    <li>99571</li>
                </ul>
            </li>
            <li>AKHIOK
                <ul>
                    <li>99615</li>
                </ul>
            </li>
            <!--- etc. --->
            <li>BARROW
                <ul>
                    <li>99723</li>
                    <li>99759</li>
                    <li>99789</li>
                    <li>99791</li>
                </ul>
            </li>
            <!--- etc. --->
        </ul>
    </li>
    <!--- stateCodes etc. --->
</ul>

cfscript

ColdFusion 6 (MX) anche se attuale

<cfscript>
    for (x = 1; x LTE geo.recordcount; x = x + 1) {
        writeOutput( '<li>' & geo.city[x] & ' | ' & 
            geo.stateCode[x] & ' | ' & geo.zipCode[x] & '</li>');
    }
</cfscript>

ColdFusion 8 anche se attuale

<cfscript>
    for (x = 1; x <= geo.recordcount; x++) {
        writeOutput( '<li>' & geo.city[x] & ' | ' & 
            geo.stateCode[x] & ' | ' & geo.zipCode[x] & '</li>');
    }
</cfscript>

ColdFusion 10 anche se attuale

Con la sintassi FOR IN , x è un oggetto riga di query, non l'indice di riga.

<cfscript>
    for (x in geo) {
        writeOutput( '<li>' & x.city & ' | ' & 
            x.stateCode & ' | ' & x.zipCode & '</li>');
    }
</cfscript>

ColdFusion 11 anche se attuale

ColdFusion 11 consente di scrivere la maggior parte dei tag come cfscript.

<cfscript>
    cfloop(query: geo, startrow: 1, endrow: 2) {
        writeOutput( '<li>' & geo.city & ' | ' & 
            geo.stateCode & ' | ' & geo.zipCode & '</li>');
    }
</cfscript>

Con il group .

<cfscript>
    cfloop(query: geo, group: 'city') {
        writeOutput( '<li>' & geo.city & '<ul>');
        cfloop() { // no arguments, just as in the tag syntax.
            writeOutput('<li>'  & geo.zipCode & '</li>');
        }
        writeOutput('</ul></li>');
    }
</cfscript>

Elenco

Considera questo elenco:

<cfset foo = "one,two,three,four" />

Tag sintassi

parametri

Attributo necessario Predefinito Descrizione
elenco vero Un oggetto lista. La variabile deve essere valutata (inclusa con ##)
indice vero L'elemento corrente della lista.
<cfoutput>
    <cfloop list="#foo#" index="x">
        <li>#x#</li>
    </cfloop>
</cfoutput>

HTML generato

Questo avrà anche un'interruzione di riga tra ogni riga di HTML.

<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>

cfscript

Precedente a ColdFusion 8

<cfscript>
    for (x = 1; x LTE listLen(foo); x = x + 1) {
        writeOutput("<li>" & listGetAt(foo, x) & "</li>");
    }
</cfscript>

ColdFusion 8 attraverso la corrente

<cfscript>
    for (x = 1; x <= listLen(foo); x++) {
        writeOutput("<li>" & listGetAt(foo, x) & "</li>");
    }
</cfscript>

ColdFusion 9 attraverso corrente

<cfscript>
    for (x in foo) {
        writeOutput("<li>" & x & "</li>");
    }
</cfscript>

ColdFusion 11 attraverso la corrente

La funzione cfloop non ha supporto per la list .

HTML generato

Si noti che l'output di cfscript è tutto su una riga.

<li>one</li><li>two</li><li>three</li><li>four</li>

schieramento

La capacità di utilizzare direttamente un oggetto array con cfloop stata aggiunta in ColdFusion 8.

Considera questa matrice;

<cfset aFoo = [
    "one"
    , "two"
    , "three"
    , "four"
] />

Tag sintassi

ColdFusion 8 attraverso la corrente

Usando l' index attributo da solo.

parametri

Attributo necessario Predefinito Descrizione
schieramento vero Un oggetto array. La variabile deve essere valutata (inclusa con ##)
indice vero L'elemento corrente dell'array.
<cfoutput>
    <cfloop array="#aFoo#" index="x">
        <li>#x#</li>
    </cfloop>
</cfoutput>

HTML generato

Questo avrà anche un'interruzione di riga tra ogni riga di HTML.

<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>

ColdFusion 2016 attraverso la corrente

L' item attributo modifica il comportamento di cfloop partire da Coldfusion 2016.

Utilizzare l' item dell'attributo anziché o in aggiunta index .

parametri

Attributo necessario Predefinito Descrizione
schieramento vero Un oggetto array. La variabile deve essere valutata (inclusa con ##)
articolo vero L'elemento corrente dell'array.
indice falso L'indice corrente dell'array.
<cfoutput>
    <cfloop array="#aFoo#" item="x" index="y">
        <li>#x# | #y#</li>
    </cfloop>
</cfoutput>

HTML generato

Questo avrà anche un'interruzione di riga tra ogni riga di HTML.

<li>one | 1</li>
<li>two | 2</li>
<li>three | 3</li>
<li>four | 4</li>

cfscript

Precedente a ColdFusion 8

<cfscript>
for (i = 1; x LTE arrayLen(aFoo); i = i + 1) {
    writeOutput("<li>" & aFoo[i] & "</li>");
}
</cfscript>

ColdFusion 8 attraverso la corrente

<cfscript>
for (i = 1; i <= arrayLen(aFoo); i = i++) {
    writeOutput("<li>" & aFoo[i] & "</li>");
}
</cfscript>

ColdFusion 9 attraverso corrente

Con la sintassi FOR IN , x è l'elemento dell'array corrente, non l'indice dell'array.

<cfscript>
for (x in aFoo) {
    writeOutput("<li>" & x & "</li>");
}
</cfscript>

ColdFusion 11 attraverso la corrente

La funzione cfloop non supporta l' array .

HTML generato

Si noti che l'output di cfscript è tutto su una riga.

<li>one</li><li>two</li><li>three</li><li>four</li>

File

<cfloop list="#myFile#" index="FileItem" delimiters="#chr(10)##chr(13)#">
  <cfoutput>
   #FileItem#<br />
 </cfoutput>
</cfloop>

Struttura

Considera questa struttura:

<cfset stFoo = {
    a = "one"
    , b = "two"
    , c = "three"
    , d = "foue"
} />

Tag sintassi

parametri

Si noti l'uso della item dell'attributo anziché index .

Attributo necessario genere Predefinito Descrizione
collezione vero struttura Un oggetto struct . La variabile deve essere valutata (inclusa con ##).
articolo vero stringa L'attuale key struttura,

Utilizzo delle funzioni della struttura

<cfoutput>
    <cfloop collection="#stFoo#" item="x">
        <li>#structFind(stFoo, x)#</li>
    </cfloop>
</cfoutput>

Sintassi della struttura implicita

<cfoutput>
    <cfloop collection="#stFoo#" item="x">
        <li>#stFoo[x]#</li>
    </cfloop>
</cfoutput>

HTML generato

Questo avrà anche un'interruzione di riga tra ogni riga di HTML.

<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>

cfscript

Con la sintassi FOR IN , x è una key dell'oggetto struttura.

Emetti le chiavi della struttura

<cfscript>
    for (x in stFoo) {
        writeOutput("<li>" & x & "</li>");
    }
</cfscript>

HTML generato

<li>A</li><li>B</li><li>C</li><li>D</li>

Emetti il ​​valore delle chiavi della struttura

Utilizzo delle funzioni della struttura

<cfscript>
    for (x in stFoo) {
        writeOutput("<li>" & structFind(stFoo, x) & "</li>");
    }
</cfscript>

Sintassi della struttura implicita

<cfscript>
    for (x in stFoo) {
        writeOutput("<li>" & stFoo[x] & "</li>");
    }
</cfscript>

ColdFusion 11 attraverso la corrente

La funzione cfloop non ha supporto per la collection .

HTML generato

Si noti che l'output di cfscript è tutto su una riga.

<li>one</li><li>two</li><li>three</li><li>four</li>

Index Loop

Utilizzare gli attributi from e to per specificare il numero di iterazioni che dovrebbero verificarsi. L'attributo step (facoltativo) consente di determinare quanto saranno grandi gli incrementi.

<cfloop from="1" to="10" index="i" step="2">
    <cfoutput>
        #i#<br />
    </cfoutput>
</cfloop>

Loop condizionale

Si utilizza l'attributo condition per specificare la condizione da utilizzare.

<cfset myVar=false>
<cfloop condition="myVar eq false">
    <cfoutput>
    myVar = <b>#myVar#</b>  (still in loop)<br />
 </cfoutput>
    <cfif RandRange(1,10) eq 10>
        <cfset myVar="true">
    </cfif>
</cfloop>
<cfoutput>
    myVar = <b>#myVar#</b> (loop has finished)
</cfoutput>

Ciclo di query

È possibile eseguire il looping dei risultati di una query ColdFusion.

<cfquery name="getMovies" datasource="Entertainment">
    select top 4 movieName
    from Movies
</cfquery>
<cfloop query="getMovies">
    #movieName#
</cfloop>

Elenco Loop

È possibile utilizzare l'attributo delimiters (facoltativo) per specificare quali caratteri vengono utilizzati come separatori nell'elenco.

<cfloop list="ColdFusion,HTML;XML" index="ListItem" delimiters=",;">
    <cfoutput>
        #ListItem#<br />
    </cfoutput>
</cfloop>

File Loop

È possibile eseguire il loop su un file.

<cfloop file="#myFile#" index="line">
    <cfoutput>
        #line#<br />
    </cfoutput>
</cfloop>

Cicli di raccolta / struttura COM

È possibile eseguire il loop su una struttura o una raccolta COM.

<cfset myBooks = StructNew()>
<cfset myVariable = StructInsert(myBooks,"ColdFusion","ColdFusion MX Bible")>
<cfset myVariable = StructInsert(myBooks,"HTML","HTML Visual QuickStart")>
<cfset myVariable = StructInsert(myBooks,"XML","Inside XML")>
<cfloop collection="#myBooks#" item="subject">
    <cfoutput>
        <b>#subject#:</b> #StructFind(myBooks,subject)#<br />
    </cfoutput>
</cfloop>


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow