6

こんにちは私は出力するループがあります

<cfloop collection="#SESSION.squad.achievements#" item="key">

問題は、キー(年)が間違った順序で出力され、出力されることです

2009年

2010年

2011

順序を変更するための組み込みの方法がないことがわかる限り、または何かが足りませんか?

4

2 に答える 2

10

Coldfusion構造には順序がないため、構造体をループするときに、キーが挿入されたのと同じ順序(または数値/アルファベット順など)で出力されることを保証できません。

順序が重要な場合は、代わりに配列を使用してください。

別の方法は、配列内のすべてのキーを取得し、その配列を並べ替えてループすることですが、ループ内では構造を参照します。

<!--- get an array of the keys in the desired order --->
<cfset achievements = StructSort(SESSION.squad.achievements, "numeric", "desc")>

<!--- loop over that array --->
<cfloop index="year" array="#achievements#">
    <!--- refer back to the struct, keyed on the current year we're looping on --->
    #year# : #SESSION.squad.achievements[year]#
</cfloop>
于 2011-05-03T10:10:57.353 に答える
2

これの代わりに:

<cfset SESSION.squad.achievements = StructNew() />

これを使って:

<cfset SESSION.squad.achievements = createObject("java", "java.util.LinkedHashMap").init() />

これにより、順序が維持されます。

出典: http: //www.aftergeek.com/2010/03/preserving-structure-sort-order-in.html

于 2015-10-30T11:22:21.923 に答える