属性
説明
リストに対するループでは、次のエンティティ内に含まれている要素が順次使用されます。
- 変数
- 式から返される値
- 配列
- ファイルファイルに対するループでは、ファイル全体がメモリに展開されません。
シンタックス
<cfloop index = "インデックス名" item = "項目名" array = "配列" characters = "文字数" delimiters = "アイテムの区切り文字" file = "絶対パスとファイル名" charset = "ファイルを読み取る際に使用する文字セット" list = "リスト項目" ... </cfloop>
関連項目
履歴
ColdFusion(2018 リリース)アップデート 2:cfloop のスクリプトバリアントは、配列、リストおよび構造体に対する繰り返しをサポートします。
ColdFusion 8:characters、file および array 属性が追加されました。
cfloop - 配列
|
必須/オプション |
説明 |
array |
必須 |
配列オブジェクト。 |
index |
オプション。以前のバージョンの ColdFusion では、この属性は必須でした。ColdFusion(2016 リリース)では、この属性はオプションです。item か index のどちらかが必要です。 |
配列の現在の値。 |
item |
オプション |
配列の現在の要素。ColdFusion(2016 リリース)では、item または index のどちらかを使用するか、その両方の属性を使用する必要があります。 |
次のコードサンプルでは、item も index も使用していないので、例外が発生します。
<cfset myArray = ["John", "Paul", "George", "Ringo"] > <cfloop array="#myArray#"> <cfoutput>#x# <br/> </cfoutput> </cfloop>
次に、属性 index の使用例を示します。
<cfset myArray = ["John", "Paul", "George", "Ringo"] > <cfloop array="#myArray#" index="idx"> <cfoutput>#idx# <br/> </cfoutput> </cfloop>
出力
John Paul George Ringo
次に、属性 item の使用例を示します。
<cfset myArray = ["John", "Paul", "George", "Ringo"] > <cfloop array="#myArray#" item="itm"> <cfoutput>#itm# <br/> </cfoutput> </cfloop>
出力
John Paul George Ringo
次に、item および index 属性の使用例を示します。
<cfset myArray = ["John", "Paul", "George", "Ringo"] > <cfloop array="#myArray#" item="Beatles" index="name"> <cfoutput>#name# : #Beatles# <br/> </cfoutput> </cfloop>
出力
1 : John 2 : Paul 3 : George 4 : Ringo
多次元配列のループ
多次元配列は、単一の値の配列ではなく配列の配列です。
2 次元配列から要素を読み取るには、まず行のインデックスを特定してから、その列のインデックスを特定する必要があります。例えば、曲「Surfer Girl」は行 3、列 1 にあるため、aBeachBoysAlbums[3][1] と特定されます。
2 次元配列をループするには、ループを別のループの内側にネストする必要があります。
<cfset aBeachBoysAlbums = ArrayNew(2)> <!---最初のアルバム配列「Surfin' Safari」を作成します---> <cfset aBeachBoysAlbums[1][1] = "Surfin' Safari"> <cfset aBeachBoysAlbums[1][2] = "County Fair"> <cfset aBeachBoysAlbums[1][3] = "Ten Little Indians"> <! ---2 番目のアルバム配列「USA」を作成します---> <cfset aBeachBoysAlbums[2][1] = "Surfin' USA"> <cfset aBeachBoysAlbums[2][2] = "Farmer's Daughter"> <cfset aBeachBoysAlbums[2][3] = "Miserlou"> <! ---2 番目のアルバム配列「Surfer Girl」を作成します---> <cfset aBeachBoysAlbums[3][1] = "Surfer Girl"> <cfset aBeachBoysAlbums[3][2] = "Catch a Wave"> <cfset aBeachBoysAlbums[3][3] = "The Surfer Moon"> <!---<cfdump var="#aBeachBoysAlbums#" >---> <!---ループ---> <cfloop from="1" to="#ArrayLen(aBeachBoysAlbums)#" index="i"> <cfoutput> <cfloop from="1" to="#ArrayLen(aBeachBoysAlbums[i])#" index="j"> Album: #i# Song #j#: #aBeachBoysAlbums[i][j]#</br> </cfloop> </cfoutput> </cfloop>
出力
Album: 1 Song 1: Surfin' Safari
Album: 1 Song 2: County Fair
Album: 1 Song 3: Ten Little Indians
Album: 2 Song 1: Surfin' USA
Album: 2 Song 2: Farmer's Daughter
Album: 2 Song 3: Miserlou
Album: 3 Song 1: Surfer Girl
Album: 3 Song 2: Catch a Wave
Album: 3 Song 3: The Surfer Moon
あるいは、構造体の配列を使用し、配列をループしてキーと値のペアを抽出することもできます。
次に例を示します。
<cfscript> data = [ {code:"USA", count:324459463}, {code:"UK", count:66181585}, {code:"CAN", count:36624199}, {code:"FRA", count:64979548}, {code:"NED", count:17035938}, {code:"GER", count:82114224} ]; </cfscript> <cfloop array="#data#" index="i"> <cfoutput> #i.code#: #i.count# の人口<br> </cfoutput> </cfloop>
出力
USA の人口: 324459463
UK の人口: 66181585
CAN の人口: 36624199
FRA の人口: 64979548
NED の人口: 17035938
GER の人口: 82114224
スクリプトとしての cfloop
<cfscript> myArray = ["John", "Paul", "George", "Ringo"]; cfloop(array=myArray, index="idx"){ writeOutput(#idx# & "<br/>"); } </cfscript>
出力
John
Paul
George
Ringo
cfloop - リスト
属性 |
必須/オプション |
説明 |
list |
必須 |
要素のリスト。 |
index |
オプション |
リストの現在の値。 |
item |
オプション |
リストの現在の要素。ColdFusion(2016 リリース)では、item または index のどちらかを使用するか、その両方の属性を使用する必要があります。 |
delimiters |
オプション |
リスト項目を区切る文字。 |
次のコードサンプルでは、item も index も使用していないので、例外が発生します。
<cfset myList="John,Paul|George|Ringo"/> <cfloop list="#myList#" delimiters=",|"> <cfoutput> #name# </cfoutput> </cfloop>
次に、属性 index の使用例を示します。このサンプルでは、delimiters 属性を使用していません。
<cfset myList="John,Paul,George,Ringo"/> <!---属性インデックスを使用してリストをループ---> <cfloop list="#myList#" index="name"> <cfoutput> #name# </cfoutput> </cfloop>
出力
John Paul George Ringo
次に、属性 item の使用例を示します。このサンプルでは、delimiters 属性を使用していません。
<cfset myList="John,Paul,George,Ringo"/> <!---属性項目を使用してリストをループ---> <cfloop list="#myList#" item="Beatles"> <cfoutput> #Beatles# </cfoutput> </cfloop>
出力
John Paul George Ringo
次のように、item と index の両方を使用することもできます。
<cfset beatles="John,Paul,George,Ringo"/> <!---属性項目とインデックスを使用してリストをループ---> <cfloop list="#beatles#" item="name" index="i"> <cfoutput> #i#:#name# </cfoutput> </cfloop>
cfloop 内での delimiters の使用 - リスト
delimiters は、リスト項目を区切る文字です。次に例を示します。
- Item1, item2, item3, item4(カンマ区切りリスト)
- Item1, item2 | item3 | item4(カンマおよびパイプ区切りリスト)
サンプルコードを次に示します。
<cfset myList="John,Paul|George|Ringo"/> <!---属性インデックスと区切り文字を使用してリストをループ---> <cfloop list="#myList#" index="name" delimiters="|"> <cfoutput> #name# </cfoutput> </cfloop>
出力
John、Paul George Ringo
<cfset myList="John,Paul|George|Ringo"/> <! ---属性インデックスと区切り文字を使用してリストをループ---> <cfloop list="#myList#" index="name" delimiters=",|"> <cfoutput> #name# </cfoutput> </cfloop>
出力
John Paul George Ringo
スクリプトとしての cfloop
<cfscript> myList="1,2,3,4" cfloop(list=myList, index="i", item="j") { writeOutput("index:" & i) writeOutput("item:" & j & "") } </cfscript>
出力
index:1item:1
index:2item:2
index:3item:3
index:4item:4
cfloop - ファイル
属性 |
必須/オプション |
説明 |
file |
必須 |
file 属性は、読み込むテキストファイルの絶対パスとファイル名を示します。ファイルの絶対パスとファイル名は 1 行で指定します。サイズの大きいテキストファイルを読み込むときは、ファイルの現在行を格納するインデックス変数の値を再利用できます。ループが完了すると、ファイルは閉じられます。 |
item |
オプション |
値は line または chars です(ColdFusion 2016 の場合)。ファイルの読み込み方法を示します。 |
index |
オプション |
ColdFusion(2016 リリース)では、item または index のどちらかを使用するか、その両方の属性を使用する必要があります。 |
character |
オプション |
この属性は、ループを繰り返すたびに file 属性で指定されたファイルから読み込む文字数を示します。characters 属性の値がファイル内の文字数よりも大きい場合は、ファイル内の文字数が使用されます。 |
charset |
オプション |
ファイルを読み込むときに使用する文字セット。 |
次のコードサンプルでは、テキストファイル myfile.txt を開き、各文字を読み込んで、ループを繰り返すたびに最初の 20 文字(スペースを含む)を表示します。
<cfset myFile="c:\out\myfile.txt"/> <cfloop file="#myFile#" index="i" item="chars" characters="20"> <cfoutput> #i#:#chars#<br /> </cfoutput> </cfloop>
次のサンプルでは、index および item 属性を使用してファイルの各行を読み込みます。
<cfset myFile="c:\out\myfile.txt"/> <cfloop file="#myFile#" index="i" item="line"> <cfoutput> #i#:#line#<br /> </cfoutput> </cfloop>
cfloop - 構造体
構造体に対してループをおこなうと、構造体内の各項目が、item 属性に指定された変数名によって参照されます。すべての項目がアクセスされるまで、ループが実行されます。
属性 |
必須/オプション |
説明 |
collection |
必須 |
構造体オブジェクト。 |
item |
必須 |
キーと値のペアに対する繰り返し処理で使用する構造体のキー。collection 属性は item 属性とともに使用します。 |
例えば、次のサンプルでは、item キーは、構造体内の各項目に対して繰り返され、キーと値のペアを表示します。
<cfscript> Team = {"Marketing" = "John", "Sales" : {"Executive" : "Tom", "Assistant" = "Mike"},"IT":{"Developers":{"Dev1":"Ashley","Dev2"="Jason"}}}; </cfscript> <cfloop collection="#Team#" item="key" > <cfoutput>#Key#:</cfoutput> <cfdump var="#Team[key]#"> <br/> </cfloop>
スクリプトとしての cfloop
<cfscript> Team = {"Marketing" = "John", "Sales" : {"Executive" : "Tom", "Assistant" = "Mike"},"IT":{"Developers":{"Dev1":"Ashley","Dev2"="Jason"}}}; cfloop(collection=Team ,item="key"){ writeOutput(#Key# & ":"); writeOutput(#SerializeJSon(Team[key])#); writeOutput("<br/>"); } </cfscript>
出力
Marketing:"John"
IT:{"Developers":{"Dev2":"Jason","Dev1":"Ashley"}}
Sales:{"Executive":"Tom","Assistant":"Mike"}