配列は、データを保持するためのテーブル構造です。大きさと次元が明確に定義されたスプレッドシートのテーブルに似ています。
ColdFusion では、データを一時的に保存する場所として配列がよく使用されます。例えば、オンラインで商品を注文できるサイトの場合は、ショッピングカートの内容を配列に保持しておくことができます。配列を使用すると、注文が確定されるまでの間にショッピングカートの内容が変化しても、データベースに情報をコミットせずに済むようになります。
配列の基本概念
ColdFusion 配列の説明では、次の用語を使用します。
- 配列の次元:配列構造の相対的な複雑さの度合い。
- インデックス:特定の次元における要素の位置。通常は括弧で囲みます(my1Darray1、my2Darray11、my3Darray111)。
- 配列要素:配列のインデックスが示す位置に保存されているデータ。最も単純な配列は、1 次元の配列です。これは、テーブルの単一の行に似ています。1 次元配列には、名前(変数名)と数値インデックスがあります。インデックス番号は、配列内の 1 つのエントリ(セル)を参照します。
したがって、次のステートメントでは、MyArray という 1 次元配列の 5 番目のエントリの値が "Robert" に設定されます。
<cfset MyArray[5] = "Robert">
2 次元配列は、簡単なテーブルに似ています。3 次元配列は、キューブ状のデータと考えることができます。ColdFusion で直接作成できる配列は、3 次元までです。4 次元以上の配列は、複数のステートメントを使用して作成します。
my2darray13="Paul" というシンタックスは、My2dArray という 2 次元配列のインデックス 13 の要素に、値 "Paul" を代入することを表します。
ColdFusion 配列について
ColdFusion の配列は、一般的な配列と異なり、ダイナミックな構造を持っています。例えば、一般的な配列はサイズが一定で対称形です。これに対して、ColdFusion の配列では、データの追加または削除が可能で、各行の長さが異なります。
一般的な 2 次元配列は、個々のセルで構成された固定サイズのテーブルに似ています。
ColdFusion の 2 次元配列は、実際には、一連の 1 次元配列が含まれている 1 次元配列です。1 つの行を構成する各配列は、他の列とは独立して拡大したり縮小したりできます。
次の図は、ColdFusion の 2 次元配列です。
ColdFusion の 3 次元配列は、1 次元配列を 3 回ネストした配列です。一般的な 3 次元配列と ColdFusion の 3 次元配列にも同様な違いがありますが、紙面で表すのは難しいので 2 次元で説明します。
ダイナミックな配列は、データを追加すると拡大され、データを削除すると縮小されます。
ネガティブインデックス
ネガティブインデックスを使用して配列の要素を取得できます。例えば、配列 "arr" に "n" 要素がある場合、
- arr[-1] は a[n] を返す
- arr[-2] は a[n-1] を返す
- ...
次に例を示します。
<cfscript> animals = ['cat', 'dog', 'fish', 'bison']; writeOutput(animals[-1]); //gets the last element writeOutput(animals[-2]); //gets the last but one element </cfscript>
ネガティブインデックスを多次元配列で使用することもできます。次に例を示します。
<cfscript> arr = ArrayNew(2); // Build first album array, Surfin' Safari arr[1][1] = "Surfin' Safari"; arr[1][2] = "County Fair"; arr[1][3] = "Ten Little Indians"; // Build second album array, Surfin' USA arr[2][1] = "Surfin' USA"; arr[2][2] = "Farmer's Daughter"; arr[2][3] = "Miserlou"; // Build third album array, Surfer Girl arr[3][1] = "Surfer Girl"; arr[3][2] = "Catch a Wave"; arr[3][3] = "The Surfer Moon"; writeDump(arr) writedump(arr[-1]) writedump(arr[-1][1]) // Surfer Girl writedump(arr[-1][2]) // Catch a Wave writedump(arr[-1][3]) // The Surfer Moon writedump(arr[-1][-1]) // The Surfer Moon writedump(arr[-1][-2]) // Catch a Wave writedump(arr[-1][-3]) // Surfer Girl writedump(arr[-3]) </cfscript>