如何在结构中设置动态密钥名称?

时间:2015-04-14 11:24:48

标签: coldfusion coldfusion-10 coldfusion-11

我循环查询并想要动态设置结构键的名称及其值。但我似乎无法让它工作,因为它没有正确地解释动态值 - 它认为它是密钥的实际名称。这就是我的意思

<cfloop query="rsSettings">
 <cfset APPLICATION.Config.Settings[rsSettings.CompanyID] = StructNew()>
 <cfset APPLICATION.Config.Settings[rsSettings.CompanyID].#rsSettings.Name#" = rsSettings.SettingValue/>
</cfloop>

我需要将#rsSettings.Name#部分作为存储在该记录集中的名称值,例如“MaxOrders”

我尝试像<cfset APPLICATION.Config.Settings[rsSettings.CompanyID]."rsSettings.Name" = rsSettings.SettingValue/>一样在它周围加上引号,但它不起作用。

如何让它接受动态密钥名称?

1 个答案:

答案 0 :(得分:4)

要在结构中创建动态键,您需要遵循方括号[]括号表示法。你可以这样做:

<cfloop query="rsSettings">
     <cfset APPLICATION.Config.Settings[rsSettings.CompanyID] = StructNew()>
     <cfset APPLICATION.Config.Settings[rsSettings.CompanyID][rsSettings.Name] = rsSettings.SettingValue/>
</cfloop>

如果您有来自rsSettings查询的公司的多个设置(如Joe所述),那么在这种情况下,您可能需要检查APPLICATION.Config.Settings中是否已存在companyID。像这样:

    <cfloop query="rsSettings">
         <cfif NOT structKeyExists(APPLICATION.Config.Settings, rsSettings.CompanyID) >
              <cfset APPLICATION.Config.Settings[rsSettings.CompanyID] = StructNew()>
         </cfif>
         <cfset APPLICATION.Config.Settings[rsSettings.CompanyID][rsSettings.Name] = rsSettings.SettingValue/>
    </cfloop>