Checking for key existence in structure

戏子无情 提交于 2019-12-24 17:26:14

问题


I have a variable named #cfData# which contains an array of structures. As it's clear from the image, for 1st structure array there are 6 keys and for 2nd, only two keys,viz date and open.

If I run a common loop, to go through each and every key, I will get an error at second array element. So the following only works when all the keys are present in the structure:

<cfset blockedtotal = 0 />
<cfset bouncetotal = 0 />
<cfset blocked = 0/>
<cfset datetotal = 0 />

<cfloop array = #cfData# index = "i">
<cfset blockedtotal += i.blocked />
<cfset bouncetotal += i.bounce />
</cfloop>

After reading online, I got an idea of using StructKeyExists where I think I can proceed in the following way:

<cfif structKeyExists(cfData,"bounce")>
<cfoutput>Bounce:#cfData.bounce#"/></cfoutput>
<cfelse>
<cfoutput> Bounce : [none]<br/></cfoutput>
</cfif>

But I am wondering, where exactly should I insert the above code inside the cfloop? Please advise if my approach is wrong.

Update:

Thanks guys. I got it running by using the following code based on the answers and it's running fine:

<cfloop array="#cfData#" index="i">
  <cfif structKeyExists(i, "date")>
    <cfset counter++>
   <cfoutput>#counter#</cfoutput> Date  is: <cfoutput> #i.date#</cfoutput> <br/>
  </cfif>
</cfloop>

回答1:


you don't need a "common loop". You can loop through each struct with

<cfloop array="#cfData#" index="i">
  <cfloop collection="#i#" item="key">
    struct with key '#key#'  has data: #i[key]#
  </cfloop>
</cfloop>

Of, if you need to decide if the struct has certain key, do something:

<cfloop array="#cfData#" index="i">
  <cfif structKeyExists(i, "someKey")>
    <cfset counter++>
  </cfif>
</cfloop>


来源:https://stackoverflow.com/questions/21439794/checking-for-key-existence-in-structure

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!