我有结构数组,应该在其中访问特定字段。这是我的数据示例:
array
1
struct
address_city Washington
address_state DC
array
2
struct
address_city New York
address_state NY
array
3
struct
address_city Miami
address_state FL
我有以下代码循环遍历数组,然后通过内部循环遍历结构:
<cfloop from="1" to="#arrayLen(arrData)#" index="i">
<cfset data = arrData[i]>
<cfloop collection="#data#" item="key">
<cfoutput>#key#:#data[key]#<br></cfoutput>
</cfloop>
</cfloop>
上面的代码将产生以下输出:
address_city:Washington
address_state:DC
address_city:New York
address_state:NY
address_city:Miami
address_state:FL
相反,我只需要访问address_state
值。我已经尝试过这样的事情:
<cfloop from="1" to="#arrayLen(arrData)#" index="i">
<cfset data = arrData[i]>
<cfloop collection="#data#" item="key">
<cfoutput>#data[key]['address_state']#<br></cfoutput>
</cfloop>
</cfloop>
然后我收到此错误消息:
Message You have attempted to dereference a scalar variable of type class java.lang.String as a structure with members.
是否有一种方法只能从数组中的每个结构输出一个字段?在JS Object上进行迭代时,在JavaScript中可以执行类似的操作。示例:
for (var key in data) {
console.log(data[key]['address_state']);
}
如果有人知道在ColdFusion中实现此目标的方法,请告诉我。
答案 0 :(得分:4)
很有趣,有一种方法几乎可以像JS示例一样进行操作。
for (key in data) {
writeOutput( "Address State = " & key.address_state & "<br>");
}
https://trycf.com/gist/f0bd28bbf644912d320b10fdc5f526f4/acf?theme=monokai
您收到错误,是因为您在不需要时引用了data
数组。根据循环的性质,您已经在key
中的data
中循环。在您的脚本示例中,您不需要遍历整个数组。
答案 1 :(得分:1)
我已经解决了您的问题,希望您能获得基于脚本的编码风格的答案。但是正如您在上面的评论中所说,您需要基于标签的功能。所以在这里,我基于标记发布了我的功能。希望对您有帮助。谢谢。
<cfloop array ="#arrData#" index="data">
Address_State: #data.address_state# <br>
</cfloop>