2012-02-20 48 views
1

我有一个嵌套在另一个结构内的数组内的结构,如下所示:Arguments.cart.data.Items[x].Labels.Pkg.Titlex是一个索引,因为我在循环遍历Items)。搜索嵌套在一个数组中的结构

Items是一个数组,而Labels,PkgTitle是嵌套结构。

Title并不总是存在。所以我想检查它。但是,使用structFindKey返回一个错误

您试图取消引用类型的类coldfusion.runtime.Array的标量变量与成员的结构

我只能往里Arguments.cart.data;但是,如果数组中有多行,某些行可能包含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()正常工作。