coldfusion - 如何动态循环结构体数组

标签 coldfusion coldfusion-9

我需要从结构数组中创建一个查询对象。该数组有大约 200 个键,数组内的结构在名称、大小和深度上各不相同。这是一个节点的样子:

array of structures I need to loop thru and create query object

我已经让它在 array[#i].adGroupId 和 array[#i#].userStatus 上正常工作,但我需要在将结构值添加到查询之前检查结构值是否存在。例如, criteria.text 并不总是在结构中,因此我需要检查它,但不确定如何检查。这是到目前为止的代码,但它总是跳过 criteria.text 和 bids.maxCpc.amount.microAmount。

<cfset vColumns = "AdGroupID,KeywordText,Status,MaxCPC" />
<cfset vColumnValue = "AdGroupID,criterion.text,userStatus,bids.maxCPC" />
<cfset loopnum = 1>
<cfset myquery = QueryNew(vColumns) >
<cfloop array="#aKeywordsAll#" index="i">
    <cfset temp = QueryAddRow(myquery, 1)>
    <cfset loopNum2 = 1>
    <cfloop list="#vColumnValue#" index="j">                
        <cfif structKeyExists(aKeywordsAll[loopnum],j)>
            <cfset QuerySetCell(myquery, listGetAt(vColumns, loopNum2), aKeywordsAll[loopnum][j])>
        <cfelse>
            <cfset QuerySetCell(myquery, listGetAt(vColumns, loopNum2), "test")>
        </cfif>
        <cfset loopNum2++ />
    </cfloop>
    <cfset loopnum++ />
</cfloop>

这是创建的查询对象。它说“测试”,但希望它能给出值:

Query object created from my crazy looping

最佳答案

您的问题是 StructKeyExists 函数正在寻找一个字面名为“criterion.text”的键(例如) - 这是可能的,而不是名为“criterion”的键内的“text”键。我编写了一个 UDF 应该可以为您解决问题:

 <cffunction name="StructGetByKeyList">
    <cfargument name="struct">
    <cfargument name="key">

    <cfset var result = "">

    <cfif StructKeyExists(struct,ListFirst(key,"."))>
        <cfif ListLen(key,".") GT 1>
            <cfreturn StructGetByKeyList(struct[ListFirst(key,".")],ListRest(key,"."))>
        <cfelse>
            <cfreturn struct[key]>
        </cfif>
    <cfelse>
        <cfreturn "">
    </cfif>
 </cffunction>

然后您可以调用 Len(StructGetByKeyList(aKeywordsAll[loopnum],j)) 而不是 structKeyExists(aKeywordsAll[loopnum],j)。

对于这一行:

 <cfset QuerySetCell(myquery, listGetAt(vColumns, loopNum2), aKeywordsAll[loopnum][j])>

使用这个:

 <cfset QuerySetCell(myquery, listGetAt(vColumns, loopNum2), StructGetByKeyList(aKeywordsAll[loopnum],j))>

关于coldfusion - 如何动态循环结构体数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14574673/

相关文章:

encoding - COLDFUSION 从 Word/Outlook 复制导致问号

java - 在 Coldfusion 中使用 CFIMAP 获取最新邮件

coldfusion - 如何检索 enablecfoutputonly 的当前值?

coldfusion - 在 ColdFusion 中检查表单姓氏长度?

coldfusion - 如何更新 ColdFusion 11 中的 AntiSamy jar 文件?

coldfusion - 试图在 Notepad++ 中找到 ColdFusion 的语法高亮器

php - 是否有 ColdFusion 相当于 phpinfo()

loops - Coldfusion 用包含分割循环

sql-server-2008 - ColdFusion 查询连接

jquery - 使用 this.securejson = true;