这是前面一个问题的核心问题(虽然更简洁):
如何动态循环遍历结构数组
我会提供同样的答案。
如何动态循环遍历结构数组
要重复基本部分,以下功能应该可以满足您的需求:
<cffunction name="StructGetByKeyList">
<cfargument name="struct">
<cfargument name="key">
<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>
然后你可以只调用 StructGetByKeyList(struct1,"struct2.foo") ,如果它存在,它会返回键的字符串,如果不存在,它会返回一个空字符串。
要改为返回布尔值,请使用以下命令:
<cffunction name="StructNestedKeyExists">
<cfargument name="struct">
<cfargument name="key">
<cfif StructKeyExists(struct,ListFirst(key,"."))>
<cfif ListLen(key,".") GT 1>
<cfreturn StructNestedKeyExists(struct[ListFirst(key,".")],ListRest(key,"."))>
<cfelse>
<cfreturn true>
</cfif>
<cfelse>
<cfreturn false>
</cfif>
</cffunction>