我循环查询并想要动态设置结构键的名称及其值。但我似乎无法让它工作,因为它没有正确地解释动态值 - 它认为它是密钥的实际名称。这就是我的意思
<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/>
一样在它周围加上引号,但它不起作用。
如何让它接受动态密钥名称?
答案 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>