2016-12-30 7 views
1

私はCF 10を使用しています。スクリプトが実行されているので、私は1つのビークルを表す異なる値を含む配列を作成しています。私は、私が使用してそれに追加するよ私のスクリプトを実行しているように、すべてが正常に動作します...そして、ColdFusion - 動的に多次元配列を作成する

<cfset myArray = ArrayNew(1)> 

を使用して私のスクリプトの先頭に

<cfset temp = ArrayAppend(myArray, myQuery.VIN)> 

これを配列を初期化するが、よ私がしたいのは、スクリプトの各セクションに達した後、現在のセクションクエリのVINSを値の配列になるように更新したいということです。 ..だから

たアレイ[1] [ "VIN NUMBER 123は、"] [2] [ "VIN NUMBER 456"]

は...

なり[ 1] [ "VIN番号123"] [ "VALUE1"] [ "VALUE2"] [ "VALUE3"] [2] [ "VIN番号456"] [ "VALUE2"]

私は考えティのような何かをすることができますs ...

<cfset vindex = ArrayFind(myArray,vinToFind)> 
<cfif NOT IsArray('myArray[vindex]')> 
    <cfset myArray[vindex] = ArrayNew(1)> 
</cfif> 
<cfset temp = ArrayAppend(myArray[vindex],valueToAppend)> 

しかし、結局、私の配列はまだ1次元です。私は間違って何をしていますか?

+0

多次元配列ではなく、おそらく構造体の配列が必要です。 (または、配列の配列) – ale

+0

このスクリプトはクエリ結果をループしますか?その場合、cfoutputのグループ属性が役立つかもしれません。 –

+0

@DanBracuk - それは行いますが、クエリ結果をループし、その結果に対して特定のタスクを実行する必要があります。必要な場合は、配列内に配列を作成したい場所です。私は配列の配列を使用すると思います。 – Phil

答えて

5

@aleが示唆するように配列の配列をお勧めします。ここで

<cfset myArray = ArrayNew(1)> 

<!--- check if the VIN is already present ---> 
<cfset vindex = ArrayFind(myArray, vinToFind)> 

<!--- the VIN was found ---> 
<cfif (vindex gt 0)> 

    <!--- if the VIN is still on its own, transform it to an array ---> 
    <cfif NOT IsArray(myArray[vindex])> 
     <cfset temp = myArray[vindex]> <!--- remember current VIN ---> 
     <cfset myArray[vindex] = ArrayNew(1)> <!--- transform present index to an array ---> 
     <cfset ArrayAppend(myArray[vindex], temp)> <!--- add VIN back in ---> 
    </cfif> 

    <!--- add the VIN ---> 
    <cfset ArrayAppend(myArray[vindex], valueToAppend)> 

<!--- VIN is not present yet ---> 
<cfelse> 
    <cfset ArrayAppend(myArray, valueToAppend)> 
</cfif> 

いくつかのヒントがあります:

  1. ArrayAppend(1)[]のように記述することができます。
  2. ArrayAppend(myArray, value)は、myArray.add(value)と表記できます。
  3. ArrayAppendの返品は通常trueを返却するので、通常は保存する必要はありません。ちょうど<cfset ArrayAppend(myArray, value)>に行ってください。
  4. IsArrayには、文字列ではなく変数が必要です。 IsArray("myArray")は常にfalseを返し、IsArray(myArray)trueを返します。

上記のコードは、配列リテラルとaddメソッドを使用しています。

<cfset myArray = []> 

<!--- check if the VIN is already present ---> 
<cfset vindex = arrayFind(myArray, vinToFind)> 

<!--- the VIN was found ---> 
<cfif (vindex gt 0)> 

    <!--- if the VIN is still on its own, transform it to an array ---> 
    <cfif not isArray(myArray[vindex])> 
     <cfset myArray[vindex] = [ myArray[vindex] ]> <!--- transform present index to an array ---> 
    </cfif> 

    <!--- add the VIN ---> 
    <cfset myArray[vindex].add(valueToAppend)> 

<!--- VIN is not present yet ---> 
<cfelse> 
    <cfset myArray.add(valueToAppend)> 
</cfif> 
+0

Brilliant!ありがとう! – Phil