如何在结构中设置动态键名?

How to set a dynamic key name in a struct?

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

<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/> 但它不起作用。

我该怎么做才能让它接受动态密钥名称?

要在结构中创建动态键,您需要遵循方括号 [] 表示法。您可以按如下方式进行:

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

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

    <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>