2012-05-24 95 views
0

我試圖創建嵌套的Structs像創建嵌套結構,更好的方法是什麼?

<cffunction name="setDataAllWithFilter" output="false" access="public"> 

    <cfargument name="stCollection" required="true" type="Struct" /> 

    <cfif NOT StructKeyExists(Session, this.LOCAL) > 
     <cfset Session[this.LOCAL] = StructNew() /> 
    </cfif> 

    <cfif NOT StructKeyExists(Session[this.LOCAL], "Data") > 
     <cfset Session[this.LOCAL]["Data"] = StructNew() /> 
    </cfif> 

    <cfif NOT StructKeyExists(Session[this.LOCAL]["Data"], "Filtered") > 
     <cfset Session[this.LOCAL]["Data"]["Filtered"] = StructNew() /> 
    </cfif> 

    <cfreturn SetAll(Arguments.stCollection, Session[this.LOCAL]["Data"]["Filtered"]) /> 

</cffunction> 

是OK這樣嗎?或者有更好的方法來做到這一點?

感謝

+0

不確定您要在此處做什麼。爲什麼你需要在會​​話中創建這樣的結構? – Henry

+0

感謝您的回覆。如果不可用,創建嵌套結構體是否更好?它可以是會話,請求或任何其他本地結構。我想問的是有沒有更好的方法來創建這樣的嵌套結構?謝謝 – user160820

+0

你是否將一個具有許多鍵的結構轉換爲struct中的結構? – Henry

回答

0

你在做什麼很好。您可以使用cfparam讓您的生活更輕鬆,儘管

<cffunction name="setDataAllWithFilter" output="false" access="public"> 

    <cfargument name="stCollection" required="true" type="Struct" /> 

    <cfparam name="session[this.local]" default="#structNew()#"> 
    <cfparam name="session[this.local].Data" default="#structNew()#"> 
    <cfparam name="session[this.local].Data.Filtered" default="#structNew()#"> 

    <cfreturn SetAll(Arguments.stCollection, Session[this.LOCAL]["Data"]["Filtered"]) /> 

</cffunction> 
1

你可以看看使用StructAppend()建立會話的結構:

<cfscript> 
initStruct = {Data={Filtered={}}}; 
StructAppend(session[this.local],initStruct,false); 
</cfscript> 

不是我已經沒有時間沒有在這裏進行測試,所以因人而異

1

的SetVariable函數將創建嵌套結構以滿足要求。

<cfset SetVariable("test1.test2.test3",4)> 

將創建一個變量test1的[「test2的」] [「Test3的」]這等於4

還應考慮StructGet這將允許您創建一個基於路徑(字符串)在空的結構。

+3

你甚至不需要爲此使用'setVariable()'。只需將它打散並創建結構。 – Henry