2012-02-20 18 views
1

他の構造体の中にネストされた配列内に構造体があります。Arguments.cart.data.Items[x].Labels.Pkg.Title(をループしているため、xがインデックスです)。配列内にネストされた構造体を検索

Itemsは配列であり、Labels,Pkg、およびTitleはネストされた構造体です。

Titleは必ずしも存在しません。だから私はそれをチェックしたいと思います。しかし、structFindKeyを使用すると、私はちょうどArguments.cart.data内部を見ることができ員

を持つ構造として型クラスcoldfusion.runtime.Arrayのスカラー変数を参照解除しようとしてきたエラー

を返します。ただし、配列に複数の行がある場合は、一部の行にはTitleが含まれている場合があります。だから私はそれぞれItemsの中にTitleをチェックしたいと思う。

を私もarrayFindを試してみたが、その後、私はエラーを取得する

構造体は、私がここに途方に暮れてよ配列

として使用することはできません。

答えて

4

これは

<cfscript> 
    for (i=1;i<=ArrayLen(arguments.cart.data.Items);i++) { 
     tempI = arguments.cart.data.Items[i]; 
     if (IsDefined('tempI.Labels.Pkg.Title')) { 
      // It exists 
     } else { 
      // It doesn't 
     } 
    } 
</cfscript> 

IsDefinedは、配列でうまく再生されないが、一時値に配列の各要素を割り当てることによって、あなたはその後、IsDefinedの中でそれを参照することができます仕事を行います。

あなたはStructKeyExists

<cfscript> 
    for (i=1;i<=ArrayLen(arguments.cart.data.Items);i++) { 
     tempI = arguments.cart.data.Items[i]; 
     if (
      StructKeyExists(tempI,'Labels') 
      && StructKeyExists(tempI.Labels,'Pkg') 
      && StructKeyExists(tempI.Labels.Pkg,'Title') 
     ) { 
      // It exists 
     } else { 
      // It doesn't 
     } 
    } 
</cfscript> 
を好む場合は別の方法としては、以下のことを行うことができます
1

私はこれも過去にも出てきました。あなたの配列を構造体に一時的に固定してください...これは、structFindKey()structFindValue()が正しく動作するように欺くことになります。

関連する問題