15

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

Leigh
  • 28,765
  • 10
  • 55
  • 103
Max
  • 1,289
  • 3
  • 26
  • 50

1 Answers1

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

Fergus
  • 2,821
  • 2
  • 27
  • 41
Henry
  • 32,689
  • 19
  • 120
  • 221
  • @Max - Since you did not mention the CF version, be aware that for-in-loops with *arrays* requires CF9.0.1+. – Leigh Nov 01 '13 at 02:39
  • That did not work. It seems that your solution applies to a single structure. Remember, I have to loop through an Array of Structures. I tried accessing the first structure of the Array by doing the following: #key#:#ApiData[key]# I am using CF 8 by the way -- thanks – Max Nov 01 '13 at 04:41
  • I changed to: and it actually worked. Now all I need is to make it dynamic - thank you! – Max Nov 01 '13 at 04:52
  • @Max hmm, sorry didn't know you're still in CF8. I've updated the CFML answer and it should work for you. – Henry Nov 01 '13 at 05:20