搜索嵌套在数组中的结构

时间:2012-02-20 17:08:09

标签: arrays coldfusion struct

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

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

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

  

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

我可以看看Arguments.cart.data;但是,如果数组中有多行,则某些行可能包含Title,而其他行则不包含Title。所以我想在每个Items内检查arrayFind

我也试过{{1}},但后来我收到了错误

  

Struct不能用作数组

我在这里不知所措。

2 个答案:

答案 0 :(得分: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 :(得分:1)

我过去也遇到过这种情况。只需暂时将数组粘贴到结构中......这会使structFindKey()structFindValue()正常工作。