Szukaj…


Uwagi

Wielkie dzięki dla

Pętle w kolekcji za pomocą tagów 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>

Pętle w kolekcji za pomocą 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>

Indeks

Parametry

Atrybut wymagany Rodzaj Domyślna Opis
indeks prawdziwe strunowy Zmienna nazwa indeksu pętli. Domyślnie zakres variables .
od prawdziwe numeryczny Wartość początkowa dla indeksu.
do prawdziwe numeryczny Wartość końcowa dla indeksu.
krok fałszywy numeryczny 1 Wartość, o którą można zwiększyć lub zmniejszyć indeks na iterację.

Podstawowa pętla indeksu

Ostateczna wartość x wynosi 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

Zwiększ krok do 2

Ostateczna wartość x wynosi 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

Zmniejszenie krok o 1

Ostateczna wartość x wynosi 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 w funkcji

Upewnij się, że var lub local zasięg indeksu wewnątrz funkcji. Foo() zwraca 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 przez prąd

Funkcja cfloop nie obsługuje index jako samodzielnego mechanizmu licznika.

Stan

Składnia znaczników

Parametry

Atrybut wymagany Rodzaj Domyślna Opis
stan prawdziwe strunowy Warunek zarządzający pętlą. Nie może zawierać symboli matematycznych takich jak < , > lub = . Musi używać implementacji tekstu ColdFusion, takich jak less than , lt , greater than , gt , equals lub eq .

Ostateczna wartość x wynosi 5.

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

Wygenerowany HTML

Spowoduje to również podział wiersza między każdą linią HTML.

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

CFScript

Poprzednio do ColdFusion 8

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

ColdFusion 8 przez prąd

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

ColdFusion 11 przez prąd

Funkcja cfloop nie obsługuje condition .

Wygenerowany HTML

Zauważ, że wyjście cfscript znajduje się w jednym wierszu.

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

Zakres daty lub godziny

Przykład zakresu dat lub czasu.

Pytanie

Rozważmy tabelę dbo.state_zip , która zawiera kolumny city , zipcode statecode i zipcode i zawiera ponad 80 000 rekordów.

Parametry

Atrybut wymagany Rodzaj Domyślna Opis
pytanie prawdziwe strunowy Nazwa zmiennej obiektu zapytania.
startrow fałszywy numeryczny Początkowy indeks wiersza obiektu zapytania.
obdarzać fałszywy numeryczny Indeks końcowego wiersza obiektu zapytania.
Grupa fałszywy strunowy Nazwa kolumny zapytania, według której mają być grupowane rekordy.

Przykładowe zapytanie

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

Składnia znaczników

Używanie geo obiektu zapytania jako źródła dla cfloop . Ponieważ tabela dbo.state_zip ma tak wiele rekordów, wygenerowany HTML zajmie sporo czasu. Ten przykład pokazuje tylko HTML pierwszych 20 rekordów.

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

Wygenerowany HTML

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

Ograniczanie wydajności do określonych wierszy

Aby ograniczyć wynik zapytania do określonego zakresu wierszy, określ startrow i endrow .

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

Grupowanie wyników

W przykładowych danych ten sam stan wymieniono wiele razy w stosunku do wielu miast powiązanych z każdym stanem. Możesz także zobaczyć to samo miasto na liście wielokrotnie w stosunku do wielu kodów pocztowych powiązanych z każdym miastem.

Najpierw zgrupujmy dane wyjściowe według stanu. Zwróć uwagę na drugą instancję cfloop owiniętą wokół treści, która będzie wyprowadzana w treści pogrupowanej przez 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>

Wygenerowano HTML (ekstrakt) z jednego zgrupowanego znacznika cfloop .

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

Na koniec stateCode dane wyjściowe według stateCode , a następnie według city , aby zobaczyć wszystkie wpisy zipCode według miasta. Zauważ, że 2. cfloop jest teraz pogrupowane według city a 3. cfloop istnieje do wyprowadzania danych 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>

Wygenerowano HTML (ekstrakt) z dwóch zgrupowanych znaczników cfloop .

<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) choć obecny

<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 choć prąd

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

ColdFusion 10 choć prąd

FOR IN składni FOR IN x jest obiektem wiersza zapytania, a nie indeksem wiersza.

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

ColdFusion 11 choć prąd

ColdFusion 11 pozwala na pisanie większości tagów jako cfscript.

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

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

Lista

Rozważ tę listę:

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

Składnia znaczników

Parametry

Atrybut wymagany Domyślna Opis
lista prawdziwe Obiekt listy. Zmienna musi zostać oszacowana (opakowana w ##)
indeks prawdziwe Bieżący element listy.
<cfoutput>
    <cfloop list="#foo#" index="x">
        <li>#x#</li>
    </cfloop>
</cfoutput>

Wygenerowany HTML

Spowoduje to również podział wiersza między każdą linią HTML.

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

CFScript

Poprzednio do ColdFusion 8

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

ColdFusion 8 przez prąd

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

ColdFusion 9 przez prąd

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

ColdFusion 11 przez prąd

Funkcja cfloop nie obsługuje list .

Wygenerowany HTML

Zauważ, że wyjście cfscript znajduje się w jednym wierszu.

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

Szyk

Możliwość bezpośredniego użycia obiektu array pomocą cfloop została dodana w ColdFusion 8.

Rozważ tę tablicę;

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

Składnia znaczników

ColdFusion 8 przez prąd

Korzystanie z index atrybutów samodzielnie.

Parametry

Atrybut wymagany Domyślna Opis
szyk prawdziwe Obiekt tablicowy. Zmienna musi zostać oszacowana (opakowana w ##)
indeks prawdziwe Bieżący element tablicy.
<cfoutput>
    <cfloop array="#aFoo#" index="x">
        <li>#x#</li>
    </cfloop>
</cfoutput>

Wygenerowany HTML

Spowoduje to również podział wiersza między każdą linią HTML.

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

ColdFusion 2016 przez prąd

Atrybut item zmienia zachowanie cfloop jak ColdFusion 2016.

Użycie item atrybutu zamiast lub oprócz index .

Parametry

Atrybut wymagany Domyślna Opis
szyk prawdziwe Obiekt tablicowy. Zmienna musi zostać oszacowana (opakowana w ##)
pozycja prawdziwe Bieżący element tablicy.
indeks fałszywy Bieżący indeks tablicy.
<cfoutput>
    <cfloop array="#aFoo#" item="x" index="y">
        <li>#x# | #y#</li>
    </cfloop>
</cfoutput>

Wygenerowany HTML

Spowoduje to również podział wiersza między każdą linią HTML.

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

CFScript

Poprzednio do ColdFusion 8

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

ColdFusion 8 przez prąd

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

ColdFusion 9 przez prąd

FOR IN składni FOR IN x jest bieżącym elementem tablicy, a nie indeksem tablicy.

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

ColdFusion 11 przez prąd

Funkcja cfloop nie obsługuje array .

Wygenerowany HTML

Zauważ, że wyjście cfscript znajduje się w jednym wierszu.

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

Plik

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

Struktura

Rozważ tę strukturę:

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

Składnia znaczników

Parametry

Zwróć uwagę na użycie item atrybutu zamiast index .

Atrybut wymagany Rodzaj Domyślna Opis
kolekcja prawdziwe Struktura Obiekt struct . Zmienna musi zostać oszacowana (opakowana znakiem ##).
pozycja prawdziwe strunowy Aktualny key struktury,

Korzystanie z funkcji struktury

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

Składnia struktury niejawnej

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

Wygenerowany HTML

Spowoduje to również podział wiersza między każdą linią HTML.

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

CFScript

FOR IN składni FOR IN x jest key obiektu struktury.

Wyjmij klucze struktury

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

Wygenerowany HTML

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

Wyprowadza wartość kluczy struktury

Korzystanie z funkcji struktury

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

Składnia struktury niejawnej

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

ColdFusion 11 przez prąd

Funkcja cfloop nie obsługuje collection .

Wygenerowany HTML

Zauważ, że wyjście cfscript znajduje się w jednym wierszu.

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

Pętla indeksu

Użyj atrybutów from to aby określić, ile iteracji powinno nastąpić. (Opcjonalny) atrybut step pozwala określić, jak duże będą przyrosty.

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

Warunkowa pętla

Atrybut condition służy do określania warunku do użycia.

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

Pętla zapytań

Możesz przeglądać wyniki zapytania ColdFusion.

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

Pętla listy

Możesz użyć (opcjonalnego) atrybutu delimiters aby określić, które znaki są używane jako separatory na liście.

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

Pętla plików

Możesz zapętlić plik.

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

Pętle kolekcji / struktury COM

Możesz zapętlić kolekcję Structure lub 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow