2013-11-01 22 views
11

给予结构下面的数组:Coldfusion - 如何遍历一个结构数组并动态地打印出所有的KEY值?

enter image description here

我能够做打印出来自各个领域的所有值:

<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 

现在我通过所有字段,以便试图循环我不必实际写出每个字段的名称 。我如何动态地做到这一点? 喜欢的东西:

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

我不是一个ColdFusion的家伙,只是帮助好友和ColdFusion的语法与净:-)非常不同

谢谢您的帮助

+2

我在这个问题上的投票应该让自己的声誉为3个位数。你欠我一杯啤酒。 –

回答

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

或者你可以使用CFScript,它应该更容易拾取。

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

使用此链接:http://www.learncfinaweek.com/week1/Looping/

+0

@Max - 由于您没有提及CF版本,请注意带*数组*的for-in-loops需要CF9.0.1 +。 – Leigh

+0

这没有奏效。看来您的解决方案适用于单一结构。请记住,我必须循环访问一个结构数组。 我试图通过执行以下操作访问阵列的第一结构: \t \t \t \t \t \t \t \t#键#:#ApiData [键]# \t \t \t 我使用CF 8通过的方式 - 感谢 – Max

+0

我更改为:和它实际工作。现在我需要的只是让它动态 - 谢谢! – Max