Search code examples
arrayscoldfusionstructurecoldfusion-8

Coldfusion - How to loop through an Array of Structure and print out dynamically all KEY values?


Giving the Array of Structure below:

enter image description here

I am able to print out all values from all fields by doing:

    <cfset ColumnNames  = structKeyArray(ApiData[1])>                       
    <cfset ColumnLength = ArrayLen(ColumnNames)>    

    <cfloop from="1" to="#ArrayLen(ApiData)#" index="i">            
       <cfdump var="#ApiData[i].Created#">              
       <cfdump var="#ApiData[i].Name#">
               ...and so on

Now I am trying to loop through all fields so that I dont have to actually write the name of each field. How do I do this dynamically? Something like:

    <cfloop from="1" to="#ArrayLen(ApiData)#" index="i">    
      <cfloop from="1" to="#ColumnLength#" index="i">
              <!---<cfdump var="#ApiData[i]." + "#ColumnNames[i]#" + "#">--->
              <!---<cfdump var="#ApiData[i].ColumnNames[i]#">--->
      </cfloop>
    </cfloop>

I am not a ColdFusion guy, just helping a buddy and the ColdFusion syntax is very different from .Net :-)

Thank you for your help


Solution

  • <cfloop from="1" to="#arrayLen(ApiData)#" index="i">
      <cfset data = ApiData[i]>
      <cfloop collection="#data#" item="key">
        #key#:#data[key]#
      </cfloop> 
    </cfloop>
    

    Or you can use CFScript, which should be much easier to pick up.

    for (d in ApiData)  // for-in loop for array
    {
      for (key in d)  // for-in loop for struct
      {
         writeOutput(key & ":" & d[key]);
      }
    }
    

    use this link: http://www.learncfinaweek.com/week1/Looping/